AsyncReceiveDispatcher中buffer空间的疑惑
来源:8-9 消息粘包与消息不全测试
等待灬
2018-12-28
/** * 解析数据到Packet */ private void assemblePacket(IoArgs args) { if (packetTemp == null) { int length = args.readLength(); packetTemp = new StringReceivePacket(length); buffer = new byte[length]; total = length; position = 0; } int count = args.writeTo(buffer, 0); if (count > 0) { packetTemp.save(buffer, count); position += count; // 检查是否已完成一份Packet接收 if (position == total) { completePacket(); packetTemp = null; } } }
buffer = new byte[length];老师,这一步,就是消息第一次进来packetTemp为空,此时要初始化packetTemp,当前dispatcher中的buffer的length其实是可以设置为args的capacity的吧,
因为假如我消息的长度为50,args的capacity为5,每一次执行这个int count = args.writeTo(buffer, 0)其实也就能写进去5个长度的数据,也就是args的capacity限制了,但是buffer的长度设置的是50,其实buffer后面空间每次都空的,因为packetTemp.save(buffer, count);的时候也是从buffer的0下标开始读去save的
写回答
2回答
-
Yes Yes~~ 是这样的哈~~ 学到了哈~~;在你的这个调度中buffer的长度只需要是args的容量即可.
052019-07-13 -
等待灬
提问者
2018-12-28
我试了一下好像没什么问题,就是不知道我想的对不对,有没有隐患
00
相似问题