我刚接触Java NIO,不确定如何使用nio。假设我已经从套接字读取了一些数据到一个ByteBuffer
中,并且使用ByteBuffer
的get方法消耗了所有字节,除了一个字节。我知道下一个是四个字节的二进制整数,所以我想使用getInt()
,但是只有int的第一个字节在缓冲区中。
对我来说自然的事情是从连接中填充更多的字节到缓冲区中,然后继续。如果我理解正确,我可以通过以下方式实现:
buf.compact();
buf.position(buf.limit());
buf.limit(buf.capacity());
然后读取更多字节。
由于没有这种行为的方法,但有flip()
方法,我想知道我的想法是否正确。是否有更好的方法?
如果连接传递长度+数据消息流,则会自然发生这种情况。
compact()
之后,缓冲区已经准备好可以读取更多的字节。一旦读取了更多的字节,使用flip()
并继续读取。 - Louis Wasserman