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()
方法中添加大小和偏移量参数,而无需创建和填充新数组。