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