fla*_*ash 6 java arrays nio bytebuffer guava
的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());
Run Code Online (Sandbox Code Playgroud)
我怎么能只发送oldBuffer. 有没有一种班轮可以做到这一点?
您可以翻转缓冲区,然后使用缓冲区的剩余大小创建一个新数组并填充它。
oldBuffer.flip();
byte[] remaining = new byte[oldBuffer.remaining()];
oldBuffer.get(remaining);
Run Code Online (Sandbox Code Playgroud)
flip()与Arrays.copyOf 单行的另一种方式
oldBuffer.flip();
Arrays.copyOf(oldBuffer.array(), oldBuffer.remaining());
Run Code Online (Sandbox Code Playgroud)
而没有 flip()
Arrays.copyOf(oldBuffer.array(), oldBuffer.position());
Run Code Online (Sandbox Code Playgroud)
也像 EJP 所说的那样,如果您可以访问该send(..)方法,则可以向该方法添加大小和偏移量参数send(),而无需创建和填充新数组。