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更新positionand limit

于 2011-06-24T16:13:25.803 回答