2011-12-24 2 views
1

Я использую стандарт ObjectDecoder и ObjectEncoder от netty framework.десериализовать различные объекты в нетти

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

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

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

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

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

ответ

1

Безопасно ли сериализовать, десериализовать объекты разных типов через только один экземпляр конкретного 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 с другой стороны.

+0

Благодарим за всех. Нет ничего в netty-3.2.7 javadoc о том, почему конструктор ObjectDecoder по умолчанию деградирует, но он не является жизненно важным. –