L R*_*son 5 java nio bytebuffer
我是Java NIO的新手,我不确定如何做nio-ishly.
假设我已经从套接字读取了一些数据,ByteBuffer并使用get方法消耗了所有字节,但只有一个ByteBuffer.我知道下一件事将是四个字节,带有二进制格式的整数,所以我想使用getInt(),但只有int的第一个字节在缓冲区中.
对我来说很自然的事情是用连接中的更多字节填充缓冲区然后继续.如果我理解正确,我可以实现这一点
buf.compact();
buf.position(buf.limit());
buf.limit(buf.capacity());
Run Code Online (Sandbox Code Playgroud)
然后读取更多字节.
由于没有这种行为的flip()方法,但有方法,我想知道我的想法是否错误.有没有更好的方法来做到这一点?
如果连接传递长度+数据消息流,则自然会发生这种情况.
小智 2
buf.compact();
// wrong: buf.position(buf.limit());
// no need to: buf.limit(buf.capacity());
Run Code Online (Sandbox Code Playgroud)
请不要改变位置。Position aftercompact()指向缓冲区未获取部分之后的第一个字节 - 正是您想要的位置。
设置容量限制是多余的:compact()已经为您完成了。
| 归档时间: |
|
| 查看次数: |
436 次 |
| 最近记录: |