2

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

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

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

但无法设法获取我存储在直接缓冲区中的数据。请让我以这种方式正确读取使用创建的直接缓冲区对象的数据NewDirectByteBuffer()

4

1 回答 1

2

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

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

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

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

不幸的是,这可能意味着任何事情。

尽可能多地使用 Java 的部分原因是它简化了调试。

于 2012-11-07T08:51:33.757 回答