jni把java对象数组排序(第二篇)

处理数组 —— 对象类型数组(Object[])
·JNI 没有提供直接把 Java 的对象类型数组(Object[])直接转到 C++中的 jobject[]数组的函
数,而是直接通过 Get/SetObjectArrayElement 这样的函数来对 Java 的 Object[]数组进行操作。
·使用上述的函数也不用释放任何资源
·NewObjectArray 可以通过指定长度初始化值来创建某个类的数组
实例代码:
Java 中定义一个数组:
public class JNArray {
int[] arrays = {7,3,5,2,8,1,4,6};
public native void outputArray();
public static void main(String[] args) {
}
}
然后在 C/C++中写入:
#include "cn_com_higinet_jni_JNArray.h"
#include <iostream>
using namespace std;
JNIEXPORT void JNICALL Java_cn_com_higinet_jni_JNArray_outputArray(JNIEnv *env, jobject obj){
jfieldID fid_arrays = env->GetFieldID(env->GetObjectClass(obj),"arrays","[I");
jintArray jint_arr = (jintArray)env->GetObjectField(obj,fid_arrays);
jint* int_arr = env->GetIntArrayElements(jint_arr,NULL);
jsize len = env->GetArrayLength(jint_arr);
for(jsize i=0;i<len;++i){
cout<< int_arr[i]<<endl;
}
env->ReleaseIntArrayElements(jint_arr,int_arr,JNI_ABORT);
}
试试调用 C 中对数组的排序:
#include "cn_com_higinet_jni_JNArray.h"
#include <iostream>
#include <algorithm>
using namespace std;
JNIEXPORT void JNICALL Java_cn_com_higinet_jni_JNArray_outputArray(JNIEnv *env, jobject obj){
jfieldID fid_arrays = env->GetFieldID(env->GetObjectClass(obj),"arrays","[I");
jintArray jint_arr = (jintArray)env->GetObjectField(obj,fid_arrays);
jint* int_arr = env->GetIntArrayElements(jint_arr,NULL);
jsize len = env->GetArrayLength(jint_arr);
std::sort(int_arr,int_arr+len);
env->ReleaseIntArrayElements(jint_arr,int_arr,0);
}

猜你喜欢

转载自blog.csdn.net/u014644594/article/details/82769611