JNI访问数组的数组 [英] JNI accessing array of array
问题描述
我试图为Java中的不同排序算法编写一个基准,为此,我想探索JNI的世界.我正在尝试对数组中包含的一组int数组进行排序.这是我的Java标头:
I am trying to write a benchmark for different sorting algorithms in java, for that I wanted to explore the world of JNI. I am trying to sort a set of int arrays which are contained in an array. This is my Java header:
public static native void sort(int[][] c);
我使用javah为其生成了C头:
I used javah to generate this C header for it:
JNIEXPORT void JNICALL Java_org_jku_ssw_prsw2_ue6_jni_JNISorter_sort(JNIEnv * env,jclass cls,jobjectArray objArr
)
然后我尝试使用
jsize len = (*env)->GetArrayLength(env, objArr);
但是从这里我有点卡住了,我可以使用GetObjectArrayElement从该数组中获取一个jobject元素,但是如何从那里进行处理以获得一个jint数组,然后可以对其进行最终排序呢?
but from here I'm kinda stuck, I can get a jobject element from this array using GetObjectArrayElement but how do I procceed from there to get a jint array which I can then finally sort?
推荐答案
由于您知道检索到的 jobject
实际上是 int []
,因此可以安全地对其进行强制转换到 jintArray
,然后从那里去,例如:
Since you know the jobject
you retrieve is actually an int[]
, you can safely cast it to a jintArray
and then go from there e.g.:
JNIEXPORT void JNICALL Java_Main_sort(JNIEnv *env, jclass _, jobjectArray objArr) {
jsize len = (*env)->GetArrayLength(env, objArr);
for(int i = 0; i < len; i++) {
jintArray arr = (jintArray) (*env)->GetObjectArrayElement(env, objArr, i);
jsize innerLen = (*env)->GetArrayLength(env, arr);
jint* vals = (*env)->GetIntArrayElements(env, arr, NULL);
/* make changes to 'vals' */
(*env)->ReleaseIntArrayElements(env, arr, vals, JNI_COMMIT);
(*env)->DeleteLocalRef(env, arr);
}
}
这篇关于JNI访问数组的数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!