netty如何判断数据包是否结束

上一篇中分析netty会缓存不完整的数据包,那如何判断数据包是否结束了?

本章主要分析netty中常用判断tcp中数据包是否上传完毕。这里我还是用LengthFieldBasedFrameDecoder进行分析

其解析数据可以分为两个部分,head表示头用来记录数据长度  body表示存放的数据部分

我们以head存放body长度(不包括自身长度)

对应LengthFieldBasedFrameDecoder配置

maxFrameLength 表示数据总体字节最大大小

lengthFieldOffset 表示head相对启动地址的偏移量(一般设置为0)

LengthFieldLength 设置头的大小

initialBytesToStrip 解析数据是跳过的字节数量,一般设置为头的大小表示不将头纳入解析

上面lengthFieldEndOffset表示解析出完整的头需要的数据字节大小

我们正式分析其解码过程decode

上图中主要是readIndex来控制,如果数据大小不满足直接return掉不移动readIndex如果大小满足则移动readIndex为解析包的大小