我正在尝试为java中的不同排序算法编写基准,因为我想探索JNI的世界。 我试图对一组包含在数组中的int数组进行排序。 这是我的Java标题:
public static native void sort(int[][] c);
我用javah为它生成了这个C头:
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数组,然后我可以最终排序?
答案 0 :(得分:1)
由于您知道您检索的jobject
实际上是int[]
,因此您可以安全地将其转换为jintArray
,然后从那里开始,例如:
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);
}
}