java - 跨 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 的内容。提前致谢。
解决方案
推荐阅读
- android - 矢量绘图在某些设备上未正确显示
- python - Traceback(最近一次调用最后一次):ValueError:对已关闭文件的 I/O 操作
- javascript - YouTube 数据 API Node.js quickstart.js 问题
- apache-flink - 我们可以调用 SourceFunction#collectWithTimestamp 摄取时间中指定的时间戳吗
- apache-spark - 如何在结构化流中正确使用 foreachBatch.batchDF.unpersist()?(继续出错)
- php - Jquery Datepicker - 如何从另一个函数中的选择选项中获取日期数组,并将其传递给 datepicker 中的 disabledate
- javascript - 如何从 decodeURI(encodeURIComponent(originalString)) 中恢复?
- java - Java中获取所有IP子网详细信息的方法
- javascript - 如何通过 React Navigation 将导航道具传入功能组件屏幕?
- php - Eloquent 模型上的 $touches 属性确实减慢了测试速度