首页 > 解决方案 > 跨 JNi 传递字节缓冲区但无法看到 bytebuffer 元素

问题描述

我正在尝试将字节缓冲区从 Java 发送到 JNI 层。我在 JNI 上得到 void* 指针而没有错误。但我无法在调试中看到 ByteBuffer 中存在的元素,或者只是打印在 JNI 中访问的 bytebuffer 内容。基本上,我想交叉验证我是否正确获得了字节缓冲区,然后我将其转换为 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 的内容。提前致谢。

标签: javaandroidc++android-ndkjava-native-interface

解决方案


推荐阅读