我有一个ByteBuffer
,最多可以容纳(4 + size
)bytes
(即整数后跟size
个字符)。 然而,向ByteBuffer
写入的字符数可能小于size
。
所以我想知道,有没有办法确定写入 ByteBuffer
中的字符数,而不仅仅是其总大小?limit
、position
等似乎不是我要找的。
谢谢您的帮助!
我有一个ByteBuffer
,最多可以容纳(4 + size
)bytes
(即整数后跟size
个字符)。 然而,向ByteBuffer
写入的字符数可能小于size
。
所以我想知道,有没有办法确定写入 ByteBuffer
中的字符数,而不仅仅是其总大小?limit
、position
等似乎不是我要找的。
谢谢您的帮助!
在向ByteBuffer写入数据后,您可以使用position()
方法找到已写入的字节数。
如果您随后flip()
缓冲区,则可以使用limit()
或remaining()
方法找到缓冲区中的字节数。
如果您随后读取部分缓冲区,可以使用remaining()
方法找到剩余的字节数。
ByteBuffer
本质上是“可寻址”的。你的写入模式是什么?你只使用绝对读/写方法,还是相对读/写方法? - fgeDatagrampPacket
中读取内容。我知道 DatagramPacket
内容的最大大小将为 4 + size
。但是,可能在 int
之后的字符数少于 size
。因此,我只是想确定实际上有多少个字符在 DatagramPacket
中。感谢您的帮助。 - user2268507byte[] buffer = new byte[4 + size];
DatagramPacket request = new DatagramPacket(buffer, 4 + size);
receiver_Socket.receive(request);
int length = request.getLength() - request.getOffset() + 1;
结果是 length
= 20,因为 size
是15。也就是说,request.getOffset()
等于0。在此数据包中,我故意发送了少于 size
字符的内容。抱歉有点凌乱... - user2268507int
来包含字符数。 - user2268507DatagramChannel channel = DatagramChannel.open();
ByteBuffer bb = ByteBuffer.allocate(5+size);
channel.receive(bb);
bb.flip();
// actual length of received packet
int len = bb.remaining();
hasRemaining
怎么样? - PM 77-1hasRemaining
返回一个布尔值,指示是否还有剩余内容,而不是剩余多少字节。 - Paul Rooney