java.nio.ByteBuffer类具有ByteBuffer.array()方法,但是它返回一个数组,该数组是缓冲区容量的大小,而不是已使用的容量。因此,我遇到了一些问题。

我有一个ByteBuffer,我要为其分配一些大小,然后将数据插入其中。

ByteBuffer oldBuffer = ByteBuffer.allocate(SIZE);
addHeader(oldBuffer, pendingItems);
newBuffer.flip();
oldBuffer.put(newBuffer);
// as of now I am sending everything from oldBuffer
send(address, oldBuffer.array());

我如何才能发送oldBuffer中正在使用的内容。是否有任何班轮可以做到这一点?

最佳答案

您可以翻转缓冲区,然后使用缓冲区的剩余大小创建一个新的数组并填充它。

oldBuffer.flip();
byte[] remaining = new byte[oldBuffer.remaining()];
oldBuffer.get(remaining);

flip()Arrays.copyOf在一个衬里中的另一种方式

oldBuffer.flip();
Arrays.copyOf(oldBuffer.array(), oldBuffer.remaining());

而且没有flip()
Arrays.copyOf(oldBuffer.array(), oldBuffer.position());

就像EJP所说的那样,如果可以访问send(..)方法,则可以在send()方法中添加大小和偏移量参数,而无需创建和填充新数组。

07-21 11:42