0

ByteBuff我注意到在使用 Netty 时可以相互写入作为 Java 对象的实例或普通 Java 对象的数据。

在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();

WhereUnpooled.copiedBuffer用于创建要写入的数据。此方法返回一个ByteBuf.

那么问题是:编写(或读取)计划 Java 对象和ByteBuf

4

1 回答 1

2

当你写一个 ByteBuf 时,消息不需要任何转换。当它是 Java 对象时,您需要一个编码器/解码器。在这里,您有以下内容:

它们将 Java 对象转换为 ByteBuf(编码器)或反向(解码器)。

您想要使用其中一种的方式取决于您当前的情况:

  • 你管理 Java 对象吗?可能拥有编解码器(编码器/解码器)是一个好方法。
  • 您是否管理过简单数据(字节流、简单值...)?大概直接管理ByteBuf是个好办法。这些并不是唯一需要决定其中一个的相关问题。

但最后,在 Netty 中,一切都是 ByteBuf。

于 2021-02-27T13:44:04.050 回答