私はC/C++で書かれたネイティブコード(NDK経由でアクセス)を含むAndroidプロジェクト(Android 1.6以降をターゲットにしています)を持っています。最も効率的な方法は、JavaからNDKを介してJNIグルー層にバイト配列を渡すことです。私の懸念事項は、Android用のNDKがバイト配列をコピーするか、私に直接参照を与えるかどうかということです。私はC++レベルでバイトへの読み取り専用アクセスが必要なので、シーンの背後にあるコピーは私の視点からは時間の無駄でしょう。Android:ネイティブC++に読み込み専用バイトを渡す最も効率的な方法
ウェブ上でこれについての情報を見つけるのは簡単ですが、どのような情報が最も適切かはわかりません。例:
Get the pointer of a Java ByteBuffer though JNI
http://www.milk.com/kodebase/dalvik-docs-mirror/docs/jni-tips.html
http://elliotth.blogspot.com/2007/03/optimizing-jni-array-access.html
だから、誰もが、現在のNDKでこれを行うための最善の(最も効率的な、少なくともコピー)方法が何であるかを知っているのですか? GetByteArrayRegion? GetByteArrayElements?他に何か?
逆を実行するための同様の効率的なAPIはありますか? - 'unsigned char *'をネイティブレイヤーから 'byte []'または 'byteBuffer'としてJavaレイヤーに渡しますか? –
ダイレクトByteBufferとバイト[]はどちらもネイティブ側からの読み書きに使用できます。 env-> GetDirectBufferAddress(buffer)またはenv-> Get ArrayElements(array、...)を呼び出すと、Cのmemcopy関数を使用して読み取り/コピーできます。しかし、直接ByteBufferははるかに高速で、コピーを再生しない、より安全な、等 –