我正在尝试将字节缓冲区从Java发送到JNI层。我在JNI上获得void *指针而没有错误。但是我无法在调试中看到ByteBuffer中存在的元素,或者只是打印在JNI中访问的字节缓冲区内容。 基本上,我想交叉验证我是否正确获取了字节缓冲区,然后将其转换为std :: byte *,因为对此没有专门知识,也没有资源,我不确定是否正确一样。
所以,这是我正在处理的代码:
在Java方面:
byte[] array = {1, 2, 3, 4};
ByteBuffer buffer = ByteBuffer.allocateDirect(array.length);
buffer.put(array);
将bytebuffer-> buffer传递给JNI,然后在JNI上执行此操作,因为我收到了ByteBuffer作为jobject:
void* inputPtr = env->GetDirectBufferAddress(byte_buffer);
jlong capacity = env->GetDirectBufferCapacity(byte_buffer); //Works fine returns 4
std::byte* data;
data = static_cast<std::byte *>(inputPtr); //Working without error
这是将std :: byte *数据分配给inputPtr的正确方法,也是在获取inputPtr时如何检查byte_buffer的内容。预先感谢。