是否可以在 JNI 中引用整个字节数组而不调用任何副本?
在本机 C 代码中,我有一个从 Java 传递的字节数组,我只想将一些数据与该字节数组进行比较,因此我不想进行任何内存复制。是否可以 ?
我知道我可以通过使用类似的 GetPrimitiveArrayCritical 来获取本机中字节数组的指针
JNIEXPORT jbyteArray JNICALL Java_nfore_android_bt_pro_nfhfp_dsp
(JNIEnv *env, jobject jobj, jbyteArray jbIn, jbyteArray jbBase){
jbyte *bufferIn;
jbyte *bufferBase;
bufferIn = (*env)->GetPrimitiveArrayCritical(env, jbIn, NULL);
LOGD("Begin of dsp()");
LOGD("In dsp() Before Comparing...");
// Compare bufferIn with bufferBase here...
LOGD("In dsp() After Comparing...");
LOGD("End of dsp()");
(*env)->ReleasePrimitiveArrayCritical(env, jbIn, bufferIn, 0);
return jbIn;
}
正如您所看到的,因为我可能会更改 jbIn 中的数据,所以我应该使用 GetPrimitiveArrayCritical 来获取其指针并稍后释放它。
但是,如果我只想读取字节数组 jbBase,如何获取 jbBase 的指针而不使用 GetPrimitiveArrayCritical ?
任何建议将不胜感激。多谢。
我使用以下内容来读取字节数组...
jbyte *b = (jbyte *)env->GetByteArrayElements(jbBase, NULL);
// read bytes in *b here
...
// release it
env->ReleaseByteArrayElements(jbBase, b, 0 );
您仍然需要释放它,因为这会阻止垃圾收集器在您仍在使用它时潜在地删除它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)