一 ByteToMessageDecoder
1.1 实例
ByteToMessageDecoder,用于把一个byte流转换成一个对象,实例:
public class StringDecoder extends ByteToMessageDecoder {
protected void decode(ChannelHandlerContext ctx, ByteBuf in,
List<Object> out) throws Exception {
byte[] bytes = new byte[in.readableBytes()];
in.readBytes(bytes);
out.add(new String(bytes));
}
}
它有一个抽象方法decode,我们实现了这个方法,这个方法的第三个参数是一个List,所有加入这个List的对象都会被逐一的调用fireChannelRead方法映射事件。
使用方法:ByteToMessageDecoder其实就是一个ChannelInboundHandler,直接加入到Pipeline即可:
serverBootstrap.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
socketChannel.pipeline(

本文详细介绍了Java NIO中的ByteToMessageDecoder如何处理TCP粘包和拆包问题,通过源码分析和实例解释了其工作原理。同时讨论了TCP粘包拆包的原因及解决办法,包括定长协议、特殊分隔符协议和长度编码协议。最后提到了Netty中内置的多种粘包拆包处理器,如FixedLengthFrameDecoder和DelimiterBasedFrameDecoder。
最低0.47元/天 解锁文章
1361

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



