我有一个名为 msg
的ByteBuffer对象,其前四个字节中的预期消息长度如下所示:
int msgLen = msg.getInt();
LOG.debug("Message size: " + msgLen);
如果 msgLen
小于某个阈值,我有一个部分消息,需要缓存 . 在这种情况下,我想把前四个字节放回到消息的开头;也就是说,将消息重新组合在一起,使其与预读相同 . 例如:
if (msgLen < threshold) {
msg.rewind();
msg.put(msgLen);
不幸的是,这似乎不是正确的方法 . 我尝试了很多翻转,放置和倒带的组合,但一定是误会 .
如何将字节按原始顺序放回写缓冲区?
1 回答
答案由Andremoniy在评论部分发布 . 读操作不消耗缓冲区中的字节,因此
msg.rewind()
就足够了 . 由于程序中的某些其他逻辑,这在我的情况下不起作用,并且我错误地将其与缓冲级别的问题相关联 .