Hos*_*ein 3 c++ java java-native-interface
我想将一个大字节 [] 从 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
Run Code Online (Sandbox Code Playgroud)
并通过以下方式在 C++ 中访问它:
uint8_t *iBuf = (uint8_t*) env->GetDirectBufferAddress(buf1);
Run Code Online (Sandbox Code Playgroud)
但是,bb.put(byteArray)操作,是一个副本。如果我使用ByteBuffer.wrap(byteArray),则无法使用env->GetDirectBufferAddress. 我如何解决这个困境并传递一个byte[]而无需复制。
您需要致电:
GetPrimitiveArrayCritical
Run Code Online (Sandbox Code Playgroud)
和
ReleasePrimitiveArrayCritical
Run Code Online (Sandbox Code Playgroud)
以供参考byte[]。根本不用理会ByteBuffer。
| 归档时间: |
|
| 查看次数: |
1872 次 |
| 最近记录: |