Разница между записью ByteBuf и обычных объектов Java

Я заметил, что можно записывать другие данные, которые являются экземпляром ByteBuff или простые объекты Java при использовании Netty.

Как видно в HAProxyClient

В этом файле у вас есть

      HAProxyMessage message = new HAProxyMessage(
                    HAProxyProtocolVersion.V2, 
                    HAProxyCommand.PROXY, HAProxyProxiedProtocol.TCP4,
                    "127.0.0.1", 
                    "127.0.0.2", 
                    8000, 
                    9000
);

ch.writeAndFlush(message).sync();

Где обычный объект Java, HAProxyMessageбыл написан в контексте. Все еще в том же файле у вас есть:

      ch.writeAndFlush(Unpooled.copiedBuffer("Hello World!", CharsetUtil.US_ASCII)).sync();

Где Unpooled.copiedBufferиспользуется для создания записываемых данных. Этот метод возвращает.

Тогда возникает вопрос: какова материальная разница (если таковая имеется) между записью (или чтением) Java-объекта плана и ByteBuf

1 ответ

Когда вы пишете ByteBuf, сообщение не требует преобразования. Когда это объект Java, вам нужен кодировщик/декодер. Здесь у вас есть следующее:

Они преобразуют объект Java в ByteBuf (кодировщик) или наоборот (декодер).

То, как вы хотите использовать тот или иной вариант, зависит от вашего текущего случая:

  • вы управляли Java Object? Вероятно, наличие кодека (кодировщика/декодека) является хорошим способом.
  • вы управляете простыми данными (поток байтов, простые значения...)? Вероятно, управление непосредственно ByteBuf — хороший способ. Это не единственные важные вопросы, которые необходимо решить в пользу того или иного.

Но, наконец, в Netty все является ByteBuf.

Другие вопросы по тегам