如何在本机中编写/读取直接ByteBuffer?

时间:2011-06-24 15:43:47

标签: java c java-native-interface bytebuffer

我希望从本机部分的套接字接收数据,然后读取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)我可以从语句中获取int类型变量socketfd是否正确     “socketfd = fd”??? (fd是jint类型,它实际上是Linux中的socket fd) (2)如何在C ???

中将数据写入此ByteBuffer

实际上,... 我的情况是我在另一个本机C ++函数中获得了Linux套接字fd,但是,我无法在其中添加我想要的函数。我想用这个fd来读/写数据,但我知道在Java代码中这是不可能的。所以我决定将它传递给native并使用直接的ByteBuffer来存储临时数据。

有什么建议吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

您可以使用Java读取对FileDescriptors的写入。

然而,要读取/写入直接缓冲区,只需从BUFF读取/写入,并根据需要更新positionlimit