重要参数
maxFrameLength 报文最大长度,超出则直接丢弃
lengthFieldOffset 长度字段的偏移量,即报文长度字段的下标
lengthFieldLength 报文长度字段的字节长度
lengthAdjustment 长度字段的调整字段
initialBytesToStrip 报文需要跳过的字节数(从头开始)
其他:
lengthFeildEndOffset 报文长度字段结束的字节下标
参数间的关系
令 frameLength 为lengthField字段的值
lengthAdjustment + frameLength 为lengthField字段后到frame结尾的长度
initialBytesToStrip + lengthAdjustment + frameLength + lengthFeildEndOffset 为实际要读取的长度
解码方法 decode
decode方法的作用是根据所填入的参数,将应该读取到的完成frame从输入流ByteBuf中提取出来并返回,在读取的过程中利用五大参数对所要读取的字节流进行了一些基本的校验:
protected Object decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception {
if (discardingTooLongFrame) {
//先判断有没有要丢的字节
discardingTooLongFrame(in);
}
if (in.readableBytes() < lengthFieldEndOffset) {
//可读字节数不足
return null;
}
int actualLengthFieldOffset = in.readerIndex() + lengthFieldOffset;
long frameLength =