netty 处理粘包与拆包

解决拆包问题

指定包长度LengthFieldBasedFrameDecodr

netty自带的LengthFieldBasedFrameDecodr,长度偏移取值必须为16进制表示,不能是其他编码(如ASCII)。无法更改,即使想要继承,自定义实现也不行。因为读取长度字段的代码涉及到了private变量,因此无法复用,除非自己完全重写。

指定分界符DelimiterBasedFrameDecoder

如下使用回车换行作为区分

ByteBuf delimiter = Unpooled.copiedBuffer("\r\n".getBytes());
pipeline.addLast(new DelimiterBasedFrameDecoder(1024, false, delimiter));