Java字节数组到ByteBuffer或ByteBuffer到字节数组转换"没有复制"

Kad*_*SOL 0 java java-native-interface nio

这是java数组中最大的问题,它们需要复制才能进行编辑.我正在使用AMD Aparapi,我从计算中得到字节数组.我需要将字节数组显示为bytebuffer"不复制"

byte aparapiData[];
ByteBuffer buffer;
...
//here bytebuffer
buffer.clear();
buffer.put(aparapiData);
buffer.flip();

socket.write(buffer);
Run Code Online (Sandbox Code Playgroud)

代码中的问题,buffer.put是将字节数组复制到bytebuffer.并且还有将字节数组转换为bytebuffer的反向问题.

他们真的需要复制数据吗?我可以在不复制的情况下在C++上发送纯数据.

我怎样才能在Java上解决这个问题?

Sam*_*tep 8

要获取指向现有字节数组的ByteBuffer,可以使用以下wrap函数:

byte[] array = /* something */;
ByteBuffer buffer = ByteBuffer.wrap(array);
Run Code Online (Sandbox Code Playgroud)

要获取指向现有ByteBuffer的字节数组,可以使用以下array方法:

ByteBuffer buffer = /* something */;
byte[] array = buffer.array();
Run Code Online (Sandbox Code Playgroud)

请注意,后者仅在ByteBuffer由数组支持时才有效(即hasArray返回时true).

缺乏对称性的原因是ByteBuffer可以以任何数量的不同方式实现.有时它实现为内存中的一个数组,但它很可能在查询时从磁盘或网络或其他来源读取数据.在这种情况下,您不能只访问底层数组,因为没有.