获取从JNI方法返回到Java的直接缓冲区对象的数据?

时间:2012-11-07 08:47:49

标签: java c java-native-interface

我是JNI的新手,并努力实现一项要求。我有 使用NewDirectByteBuffer() API和JNI在JNI中分配直接缓冲区 想要访问Java端的缓冲区。

我所做的是我已经分配了一个本机内存并在该缓冲区中存储了一些数据。然后我使用NewDirectByteBuffer() API将该内存空间包装在直接缓冲区对象中。

然后从JAVA读取该内存中的数据,我将该直接缓冲区对象(BufferObject)返回到java端,并使用BufferObject.get()方法读取。

但无法设法获取我存储在直接缓冲区中的数据。请允许我这样读取使用NewDirectByteBuffer()创建的直接缓冲区对象的数据是否正确?

1 个答案:

答案 0 :(得分:2)

我一直在做的事情(这并不意味着最好的方式)是

  • 在Java中创建直接的ByteBuffer。
  • 将其传递给JNI方法进行填充(更新数据并正确设置位置和限制)
  • 使用ByteBuffer.order(ByteOrder.nativeOrder()),以便以本机字节顺序读取/写入数据。
  • 尽可能多地重复使用ByteBuffer,因为它的创建和免费相对昂贵。

即。我尽可能少地使用本机代码。 ;)

  

但无法设法获取我存储在直接缓冲区中的数据。

不幸的是,这可能意味着什么。

尽可能在Java中执行操作的部分原因是它简化了调试。