该类java.nio.ByteBuffer有一个ByteBuffer.array()方法,但是它返回一个数组,该数组是缓冲区容量的大小,而不是已使用的容量。因此,我遇到了很多问题。
我注意到 usingByteBuffer.remaining()给出了缓冲区当前正在使用的字节数,所以基本上我正在寻找的是一种byte[]仅获取正在使用的字节的方法。(即,正在显示的字节ByteBuffer.remaining()。
我尝试了一些不同的事情,但我似乎失败了,我能想到的唯一解决方法是使用ByteBuffer剩余缓冲区的分配大小创建另一个,然后向其中写入(x)字节。
通过阅读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) 形式的此方法的调用与调用的行为完全相同
Run Code Online (Sandbox Code Playgroud)src.get(a, 0, a.length)
| 归档时间: |
|
| 查看次数: |
3742 次 |
| 最近记录: |