通过上一节的分析,我们已经了解到,当Netty读取到客户端发送的数据之后是读取到了ByteBuf中,实际上就是字节,但是在java中一般传递过来的都是对象信息,发送端将待发送的数据序列化成字节然后通过网络发送出去,接收端将接收到的字节数据然后反序列化。
首先我们介绍下Netty中Inbound和Outbound编解码器:
MessageToMessageEncoder和MessageToMessageEncoder:
MessageToMessageDecoder:对接收的数据进行解码,将接收的字节反序列化为需要的java对象,其实现channelRead如下:
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
CodecOutputList out = CodecOutputList.newInstance();
try {
if (acceptInboundMessage(msg)) {
I cast = (I) msg;
try {
decode(ctx, cast, out);
} finally {
ReferenceCountUtil.release(cast);
}
} else {
out.add(msg);
}
} catch (DecoderException e) {
throw e;
} catch

本文详细介绍了Netty中的Inbound和Outbound编解码器,包括MessageToMessageEncoder和MessageToMessageDecoder,展示了如何处理字节序列化与反序列化,以及ByteArrayEncoder和ByteArrayDecoder的作用。此外,还介绍了各类解码器如ReplayingDecoder和FrameDecoders,以应对网络通信中的常见问题。
最低0.47元/天 解锁文章
2550

被折叠的 条评论
为什么被折叠?



