ネイティブ部分のソケットからデータを受信し、Javaコードのデータを読み込みたいとします。 私は直接ByteBufferが良い選択かもしれないことを知っています。だから私は直接のByteBufferをネイティブに書き込む/読む方法は?
ByteBuffer myBuffer = ByteBuffer.allocateDirect(128);
のようなJava何かでのByteBufferを準備し、私は次のコード
今JNIEXPORT jboolean JNICALL Java_nfore_android_bt_pro_nfhfp_rcvSco(JNIEnv *env, jobject this, jint fd, jobject buff){
int buff_size;
int socketfd;
jbyte *BUFF = (*env)->GetDirectBufferAddress(env, buff);
buff_size = (*env)->GetDirectBufferCapacity(env, buff);
socketfd = fd; .....}
によってネイティブでこれのByteBufferを取得し、私の愚かな問題が
(1)ですされていますステートメントからちょうどint型変数、socketfdを得ることができることを修正しました。 "socketfd = fd" ??? (fdはjint型であり、実際にはLinuxのソケットfdです) (2)このByteBufferにどのようにデータを書き込むことができますか?
確かに... 私の状況では、別のネイティブC++関数でLinuxソケットfdを取得していますが、私が望む機能を追加できませんでした。私はデータを読み書きするためにこのfdを使いたいですが、Javaコードでは不可能です。だから私はネイティブに渡し、直接ByteBufferを使って一時データを保存することにしました。
提案がありますか?
ありがとうございます。
ピーター、ご返信ありがとうございます。だから私はCで通常のバッファ(ポインタ)のようにBUFFを使用できますか? –
はい、ダイレクトByteBufferのポイントです。バッファは普通の "C"メモリです(ByteBufferはJavaオブジェクトですが、ストレージはありません)。 ;) –
OK、私はそれを得た。ありがとう、ピーター。 –