1

ネイティブ部分でソケットからデータを受信し、Java コードでデータを読み取りたいと考えています。直接の ByteBuffer が適切な選択である可能性があることはわかっています。だから私はJavaでByteBufferを次のように準備します

ByteBuffer myBuffer = ByteBuffer.allocateDirect(128); 

そして、次のコードでこの 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; .....}

さて、私の愚かな問題は

(1) "socketfd = fd" という文だけで int 型の変数 socketfd を取得できるということでよろしいですか??? (fd は jint タイプであり、実際には Linux のソケット fd です) (2) C でこの ByteBuffer にデータを書き込むにはどうすればよいでしょうか ???

確かに... 私の状況では、別のネイティブ C++ 関数で Linux ソケット fd を取得していますが、必要な関数を追加できませんでした。この fd を使用してデータの読み取り/書き込みを行いたいのですが、Java コードでは不可能であることはわかっています。そこで、それをネイティブに渡し、直接 ByteBuffer を使用して一時データを保存することにしました。

なにか提案を ?

ありがとうございました。

4

1 に答える 1

2

Java で FileDescriptors に読み書きできます。

ただし、ダイレクト バッファの読み取り/書き込みを行うには、必要に応じて、およびBUFFを更新する必要があります。positionlimit

于 2011-06-24T16:13:25.803 に答える