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