Java,ByteBuffer转换为字节[],array()和get()之间有什么不同?

Java,ByteBuffer转换为字节[],array()和get()之间有什么不同?,java,Java,ByteBuffer缓冲区= 方法1: byte [] array = new byte[buffer.capacity()]; buffer.get(array); 方法2: byte [] array = = buffer.array(); 调用get()将数据复制到新的字节[] 为HeapByteBuffer调用array()可能会返回ByteBuffer基础数据的byte[]数组。 对于DirectByteBuffer,由于它使用直接内存,因此调用array()将引发异常 除了第二个

ByteBuffer缓冲区=

方法1:

byte [] array = new byte[buffer.capacity()];
buffer.get(array);
方法2:

byte [] array = = buffer.array();
调用
get()
将数据复制到新的
字节[]

HeapByteBuffer
调用
array()
可能会返回ByteBuffer基础数据的
byte[]
数组。

对于
DirectByteBuffer
,由于它使用直接内存,因此调用
array()
将引发异常

除了第二个代码段中的输入错误之外,一个明显的区别是,在第一个代码段中,您可以控制使用哪个数组(甚至可以重用一个),而第二个代码段将返回字节缓冲区内部使用的数组。这也意味着,在第一个片段中,你得到了数组的一个副本,而在第二个片段中,你可以通过修改数组来修改字节缓冲区——正如这两种方法的JavaDocs中所记录的那样。除了Thomas所说的:如果
ByteBuffer
是直接的,或者没有可访问的数组支持,然后
#array()
方法将抛出异常。