1、参数说明
new LengthFieldBasedFrameDecoder(1024, 0, 4, 0, 4)
1024: 发送的数据包最大长度
0: 长度域位于整个数据包字节数组中的下标
4: 长度域的自己的字节数长度
0: 长度域的偏移量矫正
4: 丢弃的起始字节数
偏移量矫正计算方法:
包长 - 长度域的值 – 长度域偏移 – 长度域长
1、场景1
数据长度(单纯数据内容长度) + 数据内容
String str = "QUERY TIME ORDER" + i + "$_$";
byte[] bytes = str.getBytes("UTF-8");
ByteBuf message = Unpooled.buffer();
message.writeInt(bytes.length);
message.writeBytes(bytes);
ctx.writeAndFlush(message);
new LengthFieldBasedFrameDecoder(1024, 0, 4, 0, 4)
长度域下标0,长度域字节4,偏移量0,丢弃字节数4
偏移量矫正计算方法:
包长 - 长度域的值 – 长度域偏移 – 长度域长
偏移量矫正计算,假设长度域值为 N
N+4 - N - 0 - 4 = 0;
2、场景2
数据长度(包含数据长度本身) + 数据内容
String str = "QUERY TIME ORDER" + i + "$_$";
byte[] bytes = str.getBytes("UTF-8");
ByteBuf message = Unpooled.buffer();
message.writeInt(bytes.length+4);
message.writeBytes(bytes);
ctx.writeAndFlush(message);
new LengthFieldBasedFrameDecoder(1024, 0, 4, -4, 4)
长度域下标0,长度域字节4,偏移量-4,丢弃字节数4
偏移量矫正计算方法:
包长 - 长度域的值 – 长度域偏移 – 长度域长
偏移量矫正计算,假设长度域值为 N
N - N - 0 - 4 = -4;
3、场景3
头信息 + 数据长度(单纯数据内容长度)+ 数据内容
String str = "QUERY TIME ORDER" + i + "$_$";
byte[] bytes = str.getBytes("UTF-8");
ByteBuf message = Unpooled.buffer();
message.writeInt(10);
message.writeInt(bytes.length);
message.writeBytes(bytes);
ctx.writeAndFlush(message);
new LengthFieldBasedFrameDecoder(1024, 4, 4, 0, 8)
长度域下标4,长度域字节4,偏移量0,丢弃字节数8
偏移量矫正计算方法:
包长 - 长度域的值 – 长度域偏移 – 长度域长
偏移量矫正计算,假设长度域值为 N
N+8 - N - 4 - 4 = 0;
4、场景4
数据长度(单纯数据内容长度)+ 头信息 + 数据内容
String str = "QUERY TIME ORDER" + i + "$_$";
byte[] bytes = str.getBytes("UTF-8");
ByteBuf message = Unpooled.buffer();
message.writeInt(bytes.length);
message.writeInt(10);
message.writeBytes(bytes);
ctx.writeAndFlush(message);
new LengthFieldBasedFrameDecoder(1024, 0, 4, 4, 8)
长度域下标0,长度域字节4,偏移量4,丢弃字节数8
偏移量矫正计算方法:
包长 - 长度域的值 – 长度域偏移 – 长度域长
偏移量矫正计算,假设长度域值为 N
N+8 - N - 0 - 4 = 4;