我想将一个大字节[]从Java传递给C ++。我知道我可以使用Java ByteBuffers在C ++和Java之间共享内存,如下所示:
ByteBuffer bb;
bb = ByteBuffer.allocateDirect(3);
byte[] byteArray = new byte[] { 0x01, 0x02, 0x03 };
bb.put(byteArray);
modifyByteBuffer(bb); //native function
并通过以下方式在C ++中访问它:
uint8_t *iBuf = (uint8_t*) env->GetDirectBufferAddress(buf1);
但是,bb.put(byteArray)
操作是一个副本。如果我使用ByteBuffer.wrap(byteArray)
,那么我无法使用env->GetDirectBufferAddress
访问C ++端的字节数组。我怎样才能解决这个难题并传递byte[]
而无需复制。
答案 0 :(得分:3)
您需要致电:
GetPrimitiveArrayCritical
和
ReleasePrimitiveArrayCritical
用于byte[]
的引用。不要理会ByteBuffer
。