如何从ByteBuffer中获取已使用的byte[]

Hob*_*ist 4 java bytebuffer

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

我注意到 usingByteBuffer.remaining()给出了缓冲区当前正在使用的字节数,所以基本上我正在寻找的是一种byte[]仅获取正在使用的字节的方法。(即,正在显示的字节ByteBuffer.remaining()

我尝试了一些不同的事情,但我似乎失败了,我能想到的唯一解决方法是使用ByteBuffer剩余缓冲区的分配大小创建另一个,然后向其中写入(x)字节。

Jos*_*nez 5

通过阅读Javadocs,我认为剩余仅给出当前位置和限制之间的字节数。

其余的()

返回当前位置和限制之间的元素数量。

此外:

缓冲区的容量是它包含的元素数量。缓冲区的容量永远不会是负数并且永远不会改变。

缓冲区的限制是不应读取或写入的第一个元素的索引。缓冲区的限制永远不会是负数,也永远不会大于其容量。

缓冲区的位置是下一个要读取或写入的元素的索引。缓冲区的位置永远不会是负数,也永远不会大于其限制。

考虑到所有这些,怎么样:

static byte[] getByteArray(ByteBuffer bb) {
    byte[] ba = new byte[bb.limit()];
    bb.get(ba);
    return ba;
}
Run Code Online (Sandbox Code Playgroud)

这里使用ByteBuffer的get(byte[] dst)方法

公共 ByteBuffer get(byte[] dst)

相对批量获取方法。此方法将此缓冲区中的字节传输到给定的目标数组中。src.get(a) 形式的此方法的调用与调用的行为完全相同

 src.get(a, 0, a.length) 
Run Code Online (Sandbox Code Playgroud)