Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在本机中写入/读取direct ByteBuffer?_Java_C_Java Native Interface_Bytebuffer - Fatal编程技术网

Java 如何在本机中写入/读取direct ByteBuffer?

Java 如何在本机中写入/读取direct ByteBuffer?,java,c,java-native-interface,bytebuffer,Java,C,Java Native Interface,Bytebuffer,我希望从本机部分的套接字接收数据,然后读取Java代码中的数据。 我知道直接拜特伯弗可能是个不错的选择。所以我在Java中准备了一个ByteBuffer ByteBuffer myBuffer = ByteBuffer.allocateDirect(128); 我通过下面的代码在本机中得到这个ByteBuffer JNIEXPORT jboolean JNICALL Java_nfore_android_bt_pro_nfhfp_rcvSco(JNIEnv *env, jobject thi

我希望从本机部分的套接字接收数据,然后读取Java代码中的数据。 我知道直接拜特伯弗可能是个不错的选择。所以我在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中它实际上是一个套接字fd) (2) 我如何用C语言将数据写入这个ByteBuffer

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

有什么建议吗


谢谢。

您可以用Java读写文件描述符


但是,要读取/写入直接缓冲区,您只需从
BUFF
读取/写入,并根据需要更新
位置
限制

Peter,感谢您的回复。所以我可以像C中的普通缓冲区(指针)一样使用BUFF?是的,这是直接字节缓冲区的点,缓冲区是纯本机“C”内存(字节缓冲区是Java对象,但其存储不是)。)好的,我知道了。谢谢你,彼得。