ネイティブ部分でソケットからデータを受信し、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 を使用して一時データを保存することにしました。
なにか提案を ?
ありがとうございました。