ByteBuffer.wrap()这里有点疑问

来源:5-2 UDP搜索IP与端口-2

EverL

2019-09-17

解析数据时,

ByteBuffer buffer = ByteBuffer.wrap(buffer, UDPConstants.HEADER.length, dataLen)

应该写成这样吧

ByteBuffer buffer = ByteBuffer.wrap(buffer, UDPConstants.HEADER.length, dataLen - UDPConstants.HEADER.length)

这样会造成buffer的limit多分加了几个位置吧?

而且buffer满的时候会报边界溢出吧?请老师指点一下。


写回答

1回答

Qiujuer

2019-09-20

你说的对哈,这里的确有BUG的哈。虽然实际的场景下没有触发。

//img.mukewang.com/szimg/5d84332f09784dcc12801076.jpg

在源码来看,这里会有一次检测,之所以没有触发异常,是因为我们的buffer本身分配的较大,所以没有出现这个问题。


但是可以看见下面的limit是设置的两者相加,所以你的改进代码是正确的哈。

0
3
EverL
回复
Qiujuer
多谢老师
2019-09-20
共3条回复

Socket网络编程进阶与实战 系统掌握Socket核心技术

理论+实践,系统且深入掌握Socket核心技术,从容应对各种Socket应用场景的不二之选

2316 学习 · 476 问题

查看课程