上一篇中分析netty会缓存不完整的数据包,那如何判断数据包是否结束了?
本章主要分析netty中常用判断tcp中数据包是否上传完毕。这里我还是用LengthFieldBasedFrameDecoder进行分析
其解析数据可以分为两个部分,head表示头用来记录数据长度 body表示存放的数据部分
我们以head存放body长度(不包括自身长度)
对应LengthFieldBasedFrameDecoder配置
maxFrameLength 表示数据总体字节最大大小
lengthFieldOffset 表示head相对启动地址的偏移量(一般设置为0)
LengthFieldLength 设置头的大小
initialBytesToStrip 解析数据是跳过的字节数量,一般设置为头的大小表示不将头纳入解析
上面lengthFieldEndOffset表示解析出完整的头需要的数据字节大小
我们正式分析其解码过程decode
上图中主要是readIndex来控制,如果数据大小不满足直接return掉不移动readIndex如果大小满足则移动readIndex为解析包的大小