Java 从ByteBuffer读取前四个字节,然后将它们写回?

Java 从ByteBuffer读取前四个字节,然后将它们写回?,java,bytearray,bytebuffer,Java,Bytearray,Bytebuffer,我有一个名为msg的ByteBuffer对象,其预期消息长度在前四个字节中,如下所示: int msgLen = msg.getInt(); LOG.debug("Message size: " + msgLen); 如果msgLen小于某个阈值,则我有一条部分消息,需要缓存。在本例中,我想将前四个字节放回消息的开头;也就是说,将消息放回一起,使其与预读相同。例如: if (msgLen < threshold) { msg.rewind(); msg.p

我有一个名为
msg
的ByteBuffer对象,其预期消息长度在前四个字节中,如下所示:

    int msgLen = msg.getInt();
    LOG.debug("Message size: " + msgLen);
如果
msgLen
小于某个阈值,则我有一条部分消息,需要缓存。在本例中,我想将前四个字节放回消息的开头;也就是说,将消息放回一起,使其与预读相同。例如:

if (msgLen < threshold) {
    msg.rewind();
    msg.put(msgLen);
if(msgLen
不幸的是,这似乎不是正确的方法。我尝试了许多翻转、放置和倒带的组合,但肯定是误解


如何将字节按其原始顺序放回写入缓冲区?

答案由Andremoniy在评论部分发布。读取操作不会消耗缓冲区中的字节,因此
msg.rewind()
已经足够了。这在我的情况下不起作用,因为程序中存在其他一些逻辑,我错误地将其与缓冲区级别的问题关联起来。

答案由Andremoniy在评论部分发布。读取操作不会消耗缓冲区中的字节,因此
msg.rewind()
已经足够了。这在我的情况下不起作用,因为程序中存在其他一些逻辑,我错误地将其与缓冲区级别的问题关联起来。

不清楚为什么要“放”这些字节?如果你做了
倒带
你已经在请求
消息
,那些获得的字节不会从缓冲区中删除。如果我的流不能倒带,它会引发一个错误,对吗?我的调试器显示倒带操作确实重置了位置。Andremoniy,谢谢,我以为读取时消耗了字节。仍然没有得到故意的行为,但可能是我这边。@GuillaumeF.ByteBuffers不是streamsBack到手头的问题;如果你有“部分阅读”从消息中,如何将任何进一步的输入与以前的部分读取相关联?您有某种id吗?如果没有,那么如何处理多个部分读取?感谢fge,您是指从多个输入源进行的部分读取?即同时以部分块发送两条消息?不清楚为什么要“放回”这些字节?如果你做了
倒带
你已经在请求
消息
,那些获得的字节不会从缓冲区中删除。如果我的流不能倒带,它会引发一个错误,对吗?我的调试器显示倒带操作确实重置了位置。Andremoniy,谢谢,我以为读取时消耗了字节。仍然没有得到故意的行为,但可能是我这边。@GuillaumeF.ByteBuffers不是streamsBack到手头的问题;如果你有“部分阅读”从消息中,如何将任何进一步的输入与以前的部分读取相关联?您有某种id吗?如果没有,那么如何处理多个部分读取?感谢fge,您的意思是来自多个输入源的部分读取?即同时以部分块发送2条消息?