2

私はJNIを初めて使用し、1つの要件を実装するのに苦労しています。APIを使用してJNIに直接バッファを割り当てNewDirectByteBuffer()ましたが、Java側のバッファにアクセスしたいと思います。

ネイティブメモリを割り当て、そのバッファにデータを保存し、APIを使用してそのメモリスペースを直接バッファオブジェクトにラップしましたNewDirectByteBuffer()

次に、JAVAからそのメモリのデータを読み取るために、その直接バッファobject(BufferObject)をJava側に返し、BufferObject.get()メソッドを使用して読み取りました。

しかし、ダイレクトバッファに保存したデータを取得することはできませんNewDirectByteBuffer()。?を使用して作成されたダイレクトバッファオブジェクトのデータを読み取るには、その方法が正しいと思います。

4

1 に答える 1

2

私がいつもやっていることはうまくいきました(これは最善の方法を意味するわけではありません)

  • Javaで直接ByteBufferを作成します。
  • これをJNIメソッドに渡してデータを入力します(データを更新し、位置と制限を正しく設定します)
  • ByteBuffer.order(ByteOrder.nativeOrder())データがネイティブバイト順序で読み取り/書き込みされるように使用します。
  • 作成して解放するのに比較的費用がかかるため、ByteBufferを可能な限り再利用します。

つまり、ネイティブコードでは可能な限り実行しません。;)

しかし、直接バッファに保存されているデータを取得することはできません。

残念ながら、それはほぼすべてを意味する可能性があります。

Javaで可能な限り多くのことを行う理由の一部は、デバッグを簡素化することです。

于 2012-11-07T08:51:33.757 に答える