我正在将一个 int 数组从 Java 传递给本机方法。然后在 JNI 函数中,我使用 GetIntArrayElements() 创建了一个指向 int 数组的指针,并作为 *isCopy 参数 JNI_FALSE 传递。我认为这不会创建原始数组的副本,我可以就地修改数组。然后我使用 ReleaseIntArrayElements() 并将模式参数 JNI_ABORT 传递给仅释放缓冲区。但这没有用。
从 JNI 文档:
当我尝试在 ReleaseIntArrayElements() 中使用模式“0”时,效果很好。但我不明白为什么因为我没有创建原始数组的副本,而模式“0”正在复制内容。
我想 JNI 总是创建原始数组的副本。但是随后 GetIntArrayElements() 中的 *isCopy 参数失去了意义。那么这到底发生了什么?
这是我的 JNI 功能
extern "C" JNIEXPORT jdouble JNICALL
Java_my_own_package_MainActivity_myFunction(
JNIEnv *env,
jobject /* this */, jintArray tbl) {
jint *tblptr = env->GetIntArrayElements(tbl, JNI_FALSE);
tblptr[0] = 0; //in-place change
env->ReleaseIntArrayElements(tb1, tblptr, JNI_ABORT);
return 0;
}
Run Code Online (Sandbox Code Playgroud)