jni对二维数组的处理

对二维数组的处理是建立在一维数组之上的

我的观念还是优先考虑java数组和c++数组的转换,不直接从java数组中取数据进行操作

FindClass这个方法主要是获取jclass的,所谓的二维数组就是jobjectarray里放着jxxxarray的一维数组,这样理解就好多了,关键是获取到相应的一维数组进行操作

Get\SetxxxxArrayElement直接获取某个数组里的元素

 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直接获取数组的指针

releasexxxArrayElemets释放指针

这是一对操作

 

 

转载于:https://my.oschina.net/xpbob/blog/600788

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值