десериализовать различные объекты в нетто - PullRequest
1 голос
/ 25 декабря 2011

Я использую стандартные ObjectDecoder и ObjectEncoder от Netty Framework.

  1. Безопасно ли сериализовать, десериализовать объекты различных типов черезтолько один экземпляр бетона ObjectDecoder , ObjectDecoder ?

  2. Почему конструктор по умолчанию ObjectDecoder является устаревшим?

  3. Подходящая версия конструктора получила ClassReslover в качестве аргумента.Означает ли конструктор ClassResolver , что эти конкретные ( ObjectDecoder , ObjectEncoder ) объекты могут де / сериализовать объекты и де сериализовать другие имеющиеся у меня объекты?для переключения этих ( ObjectDecoder , ObjectDecoder ) объектов в ChannelPipeline ?

Я пишу сервер, который должен ответить наразличные типы запросов, и я хочу реализовать их таким образом.

Может быть, один стандартный класс сообщений с полем TYPE_REQUEST будет лучше?

1 Ответ

1 голос
/ 26 декабря 2011

Безопасно ли сериализовать, десериализовывать объекты различных типов только через один конкретный экземпляр ObjectDecoder, ObjectDecoder?

Да.ObjectDecoder обычно не имеет состояния (кроме загрузчика классов, который, скорее всего, не изменится) - он создает все, что ему нужно, когда вы вызываете decode ().Загрузчик классов также необязателен - вы можете передать значение null, и он будет использовать любой загрузчик классов (в моем случае это загрузчик по умолчанию) в контексте при переходе к декодированию.

Почему конструктор ObjectDecoder по умолчанию устарел?

Я не уверен в этом.Я использую Netty 3.2.4, и он не устарел.Информация о версии: * @version $ Rev: 2279 $, $ Дата: 2010-05-13 23:13:07 +0900 (чт, 13 мая 2010 г.) $

Если вы используете более новую версиюверсия, посмотрите в javadoc, он должен сказать вам.

Подходящая версия конструктора получила ClassReslover в качестве аргумента.Означает ли конструктор ClassResolver, что эти конкретные объекты (ObjectDecoder, ObjectEncoder) могут де / сериализовать только один тип объектов, а чтобы де сериализовать другие объекты, которые необходимо переключить (ObjectDecoder, ObjectDecoder) в ChannelPipeline?

Совсем нет.Аргумент ClassLoader - это если у вас есть какой-то пользовательский загрузчик классов, который необходим, потому что по умолчанию он неадекватен.Вы можете сериализовать / десериализовать все что угодно с одним ObjectDecoder, если вы используете соответствующий ObjectEncoder на другой стороне.

...