将 Java 中的 ByteBuffer 转换为字节数组

61

有谁知道如何将 ByteBuffer 转换为 byte[] 数组?我需要从我的 ByteBuffer 中获取字节数组。当我运行 bytebuffer.hasArray() 时,它返回否定结果。到目前为止我看到的每一个问题都是将字节数组转换为 ByteBuffer ,但我需要另一种方法。


3
你尝试过使用 byteBuffer.array() 吗? - Johnny Willer
1
@JohnnyWiller - 它会失败... hasArray 返回的是 false - Stephen C
是的,我尝试过,但没有成功。 - Powisss
好的..我认为Nomis的回答可行 :) - Johnny Willer
2个回答

131

ByteBuffer暴露了批量的get(byte[])方法,它将字节从缓冲区传输到数组中。你需要实例化一个长度等于缓冲区剩余字节数的数组。

ByteBuffer buf = ...
byte[] arr = new byte[buf.remaining()];
buf.get(arr);

只给出代码的答案通常可以通过添加一些解释来改进 - 你能否添加一些文本来向提问者解释这段代码的作用? - J Richard Snape
13
别忘了调用buf.rewind(),否则buf.remaining()会返回不正确的值。 - BoygeniusDexter
这并不是将 ByteBuffer 转换为字节数组。它仍然返回 ByteBuffer。 - Seetha
4
数据字节被填充到“arr”变量中,而不是返回值。 - gioravered
1
byte[] arr = new byte[ buf.position() ]; buf.rewind(); buf.get(arr) - Grigory K
显示剩余2条评论

10
如果hasArray()返回false,那么调用array()将会抛出异常。
在这种情况下,获取byte[]中的数据的唯一方法是分配一个byte[],并使用get(byte[])或类似方法将字节复制到byte[]中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接