写 ByteBuf 和普通 Java 对象的区别
Difference between writing a ByteBuf and an ordinary Java Objects
我注意到在使用 Netty 时可以写入其他 ByteBuff
或普通 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();
其中Unpooled.copiedBuffer
用于创建要写入的数据。这个方法returns一个ByteBuf
.
接下来的问题是:编写(或读取)计划 Java 对象和 ByteBuf
之间的 material 区别(如果有)是什么
当你写一个ByteBuf时,消息不需要任何转换。
当它是一个 Java 对象时,你需要一个 encoder/decoder。
这里有以下内容:
- 编码器:https://github.com/netty/netty/blob/a60825c3b425892af9be3e9284677aa8a58faa6b/codec-haproxy/src/main/java/io/netty/handler/codec/haproxy/HAProxyMessageEncoder.java
- 解码器:https://github.com/netty/netty/blob/a60825c3b425892af9be3e9284677aa8a58faa6b/codec-haproxy/src/main/java/io/netty/handler/codec/haproxy/HAProxyMessageDecoder.java
他们将 Java 对象转换为 ByteBuf(编码器)或反向(解码器)。
你想使用其中一种的方式取决于你当前的情况:
- 你管理过Java对象吗?可能有一个编解码器 (Encoder/Decodec) 是个好方法。
- 您是否管理过简单数据(字节流、简单值...)?可能直接管理 ByteBuf 是一个好方法。
这些不是唯一要决定其中之一的相关问题。
但最后,在 Netty 中,一切都是 ByteBuf。
我注意到在使用 Netty 时可以写入其他 ByteBuff
或普通 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();
其中Unpooled.copiedBuffer
用于创建要写入的数据。这个方法returns一个ByteBuf
.
接下来的问题是:编写(或读取)计划 Java 对象和 ByteBuf
当你写一个ByteBuf时,消息不需要任何转换。 当它是一个 Java 对象时,你需要一个 encoder/decoder。 这里有以下内容:
- 编码器:https://github.com/netty/netty/blob/a60825c3b425892af9be3e9284677aa8a58faa6b/codec-haproxy/src/main/java/io/netty/handler/codec/haproxy/HAProxyMessageEncoder.java
- 解码器:https://github.com/netty/netty/blob/a60825c3b425892af9be3e9284677aa8a58faa6b/codec-haproxy/src/main/java/io/netty/handler/codec/haproxy/HAProxyMessageDecoder.java
他们将 Java 对象转换为 ByteBuf(编码器)或反向(解码器)。
你想使用其中一种的方式取决于你当前的情况:
- 你管理过Java对象吗?可能有一个编解码器 (Encoder/Decodec) 是个好方法。
- 您是否管理过简单数据(字节流、简单值...)?可能直接管理 ByteBuf 是一个好方法。 这些不是唯一要决定其中之一的相关问题。
但最后,在 Netty 中,一切都是 ByteBuf。