对二维数组的处理是创建在一维数组之上的java
个人观念仍是优先考虑java数组和c++数组的转换,不直接从java数组中取数据进行操做c++
FindClass这个方法主要是获取jclass的,所谓的二维数组就是jobjectarray里放着jxxxarray的一维数组,这样理解就好多了,关键是获取到相应的一维数组进行操做数组
Get\SetxxxxArrayElement直接获取某个数组里的元素this
public static native int[][] getData(); public static native void showArray(int[][] data);
JNIEXPORT jobjectArray JNICALL Java_JNITest_getData(JNIEnv *env, jclass thisObj){ int data[2][2]={{1,2},{3,4}}; //获取数组的class jclass intClass = env->FindClass("[I"); //新建object数组,里面是int[] jobjectArray jdata=env->NewObjectArray(2,intClass,NULL); //赋值 for(int i=0;i<2;i++){ jintArray intdata = env->NewIntArray(2); env->SetIntArrayRegion(intdata,0,2,(jint*)&data[i]); env->SetObjectArrayElement(jdata,i,intdata); } return jdata; } JNIEXPORT void JNICALL Java_JNITest_showArray(JNIEnv *env, jclass thisObj, jobjectArray array){ //获取数组长度 int len = env->GetArrayLength(array); int data[10][10]; for(int i=0;i<len;i++){ jintArray intdata =(jintArray)env->GetObjectArrayElement(array,i); //赋值 env->GetIntArrayRegion(intdata,0,len,(jint*)&data[i]); } for(int i=0;i<len;i++){ for(int j=0;j<len;j++){ cout<<data[i][j]<<","; } } }
这里再介绍几个方法,在特定场合要比先转换来得快指针
GetxxxArrayElements直接获取数组的指针code
releasexxxArrayElemets释放指针get
这是一对操做io