Java NIO之tcp粘包拆包

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

一 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().addLast(new StringDecoder()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值