我正在使用netty框架中的标准ObjectDecoder和ObjectEncoder。


仅通过一个具体的ObjectDecoder,ObjectDecoder实例来序列化,反序列化各种类型的对象是否安全?
为什么默认的ObjectDecoder构造函数被取消使用?
合适的构造函数版本已将ClassReslover作为参数。
ClassResolver构造函数是否暗示这些特定的对象(ObjectDecoder,ObjectEncoder)只能对一种类型的对象进行反序列化,而要对另一个对象进行反序列化,我必须在ChannelPipeline中切换这些(ObjectDecoder,ObjectDecoder)对象?


我正在编写应该对各种类型的请求做出响应的服务器,我想以此方式实施。

可能是带有TYPE_REQUEST字段的一种标准消息类会更好吗?

最佳答案

仅通过一个具体的ObjectDecoder,ObjectDecoder实例来序列化,反序列化各种类型的对象是否安全?


是。 ObjectDecoder通常不具有状态(类加载器除外,状态加载器可能不会改变)-当您调用encode()时,它会创建所需的任何其他内容。类加载器也是可选的-您可以传递null,并且在进行解码时,它将使用上下文中的任何类加载器(在我的情况下为默认值)。


  为什么默认的ObjectDecoder构造函数被取消使用?


我对此不太确定。我正在使用Netty 3.2.4,并且不推荐使用。版本信息是:
 * @version $ Rev:2279 $,$ Date:2010-05-13 23:13:07 +0900(Thu,13 May 2010)$

如果您使用的是最新版本,请查看javadoc,它会告诉您。


  合适的构造函数版本已将ClassReslover作为参数。 ClassResolver构造函数是否暗示仅一种类型的
  可以通过这些具体对象(ObjectDecoder,
  ObjectEncoder)对象并取消/序列化另一个我必须切换
  这些(ObjectDecoder,ObjectDecoder)ChannelPipeline中的对象?


一点也不。如果您有一些自定义的类加载器,因为默认的类加载器不足,则使用ClassLoader arg。您可以使用一个ObjectDecoder序列化/反序列化任何内容,只要在另一侧使用适当的ObjectEncoder即可。

07-24 09:20