【发布时间】:2016-05-15 20:19:29
【问题描述】:
我是 Java NIO 的新手,不确定如何以 nio-ishly 的方式做事。
假设我已经使用ByteBuffer 的get 方法将一些数据从套接字读取到ByteBuffer 并消耗了除一个之外的所有字节。我知道接下来会是四个字节和一个二进制格式的整数,所以我想使用getInt(),但只有 int 的第一个字节在缓冲区中。
对我来说很自然的事情是用连接中的更多字节填充缓冲区,然后继续。如果我理解正确,我可以做到这一点
buf.compact();
buf.position(buf.limit());
buf.limit(buf.capacity());
然后读取更多字节。
由于没有具有该行为的方法,但是有flip() 方法,我想知道我的想法是否错误。有没有更好的方法来做到这一点?
这种情况自然会发生,例如如果连接传递长度 + 数据消息流。
【问题讨论】:
-
不不不。仔细阅读问题......这是来自套接字的数据,正在缓冲,并且整数的第一个字节被“分离”了。但是,其他字节即将到来,因此读取一个字节并转换它是错误的。 OP 想要的是保留该字节,直到知道其他 3 个字节。
-
@dcsohl 你是对的,我的错误
-
在
compact()之后,缓冲区设置为能够读取更多字节。一旦读取更多字节,flip()并读取更多。 -
消息长度是否固定?
标签: java nio bytebuffer