跨JNi传递字节缓冲区,但看不到字节缓冲区元素

时间:2020-06-12 01:52:49

标签: java android c++ android-ndk java-native-interface

我正在尝试将字节缓冲区从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的内容。预先感谢。

0 个答案:

没有答案