我将字节缓冲区从jni返回到Java层。
getData(JNIENV, *env, jobject obj ) {
pthread_mutex_lock(&mutexA);
while(dataAvailable == 0){
pthread_cond_wait (&cond, &MutexA);
}
dataAvailable = 0;
pthread_mutex_unlock(&MutexA);
return jnv->NewDirectByteBuffer(DataPointer, dataSize);
}
从Java:
while (1) {
ByteBuffer byteBuffer = getData();
}
这个byteBuffer是否引用到DataPointer,还是复制到Java层的'byteBuffer'变量中?
分配并返回一个直接的java.nio.ByteBuffer,它引用从内存地址地址开始并扩展容量字节的内存块。
调用此函数并将返回的字节缓冲区对象返回给Java级代码的本机代码应确保该缓冲区引用的内存有效区域可供读取和(如果适用)写入。尝试从Java代码访问无效的内存位置将返回一个任意值,没有可见的效果,或者导致引发未指定的异常。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句