Java 如何在本机中写入/读取direct ByteBuffer?
我希望从本机部分的套接字接收数据,然后读取Java代码中的数据。 我知道直接拜特伯弗可能是个不错的选择。所以我在Java中准备了一个ByteBufferJava 如何在本机中写入/读取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
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对象,但其存储不是)。)好的,我知道了。谢谢你,彼得。