我希望从本机部分的套接字接收数据,然后读取Java代码中的数据。 我知道直接的ByteBuffer可能是个不错的选择。所以我在Java中准备一个类似
的ByteBufferByteBuffer myBuffer = ByteBuffer.allocateDirect(128);
我通过以下代码
在本机中获取此ByteBufferJNIEXPORT 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)我可以从语句中获取int类型变量socketfd是否正确 “socketfd = fd”??? (fd是jint类型,它实际上是Linux中的socket fd) (2)如何在C ???
中将数据写入此ByteBuffer实际上,... 我的情况是我在另一个本机C ++函数中获得了Linux套接字fd,但是,我无法在其中添加我想要的函数。我想用这个fd来读/写数据,但我知道在Java代码中这是不可能的。所以我决定将它传递给native并使用直接的ByteBuffer来存储临时数据。
有什么建议吗?
谢谢。
答案 0 :(得分:2)
您可以使用Java读取对FileDescriptors的写入。
然而,要读取/写入直接缓冲区,只需从BUFF
读取/写入,并根据需要更新position
和limit
。