【发布时间】:2015-11-27 14:41:30
【问题描述】:
我有一个名为 msg 的 ByteBuffer 对象,在前四个字节中具有预期的消息长度,我将其读取如下:
int msgLen = msg.getInt();
LOG.debug("Message size: " + msgLen);
如果msgLen 小于某个阈值,我有部分消息需要缓存。在这种情况下,我想将前四个字节放回消息的开头;也就是说,将消息重新组合在一起以与预读相同。例如:
if (msgLen < threshold) {
msg.rewind();
msg.put(msgLen);
不幸的是,这似乎不是正确的方法。我尝试过很多翻转、放置和倒带的组合,但一定是误解。
如何按原始顺序将字节放回写入缓冲区?
【问题讨论】:
-
不清楚为什么要将这些字节“放回”?如果你这样做
rewind,你已经在msg的乞讨中,那些获得的字节不会从缓冲区中删除。 -
如果我的流无法倒带,它会引发错误,对吗?我的调试器显示回卷器操作确实重置了位置。 Andremoniy,谢谢,我认为读取时会消耗字节。仍然没有得到预期的行为,但也许这是我的目标。
-
@GuillaumeF。 ByteBuffers 不是流
-
回到手头的问题;如果您对消息进行了“部分阅读”,您如何将任何进一步的输入与之前的部分阅读相关联?你有某种身份吗?如果不这样做,那么如何处理多个部分读取?
-
感谢 fge,您的意思是从多个输入源进行部分读取? IE 2 消息同时分块发送?
标签: java bytearray bytebuffer