Netty笔记
ByteBuf 转 byte数据
ByteBuf byteBuf = (ByteBuf) msg;
byte[] b = byteBuf.array(); //这样转不对
byte[] msg = new byte[byteBuf.readableBytes()]; //这样才对
byteBuf.readBytes(msg);
TCP传输发送过快导致消息粘包
参考Candy框架,Candy框架中在每次发送二进制数据流时,会先行发送一个长度为六个(byte)字节的头信息
0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
协议版本 | 序列化类型 | 正文长度(bodyDataLength >>> 24) | 正文长度(bodyDataLength >>> 16) | 正文长度(bodyDataLength >>> 8) | 正文长度(bodyDataLength) |
byte 长度8bit , int长度为4个byte=32bit , 在无符号运算(>>>)下使用byte的8个bit
处理包不完整和粘包的方法,接受ByteBuf后会判断其长度是否大于head(6)的长度,如果小于则不处理,如果大于则开始获取head中的bodylength,然后继续判断数组长度是否小于headlength+bodylength,如果小于则不处理,如果大于则返回接受到的字节数组(要注意游标的位置和移动)