JNI修改Native方法数组参数中数组里面的元素值

来源:互联网 发布:怎么找淘宝优惠券 编辑:程序博客网 时间:2024/06/06 18:41

由于JNI不能直接回调Java方法,有时候我们可能会在Native方法里面的参数放上几个空的数组,让JNI往数组里面放值,Java调用完,再从数组里面取出值。

Java代码如下:

       byte[] bytes = new byte[5];       int[] test = new int[3];       for(int i = 0;i<test.length;i++){       Log.d("MainActivity","调用前:"+i+"====>>>>>:"+test[i]);       }        new H264Android().test(test,bytes);           for(int i = 0;i<test.length;i++){        Log.d("MainActivity","调用后:"+i+"====>>>>>:"+test[i]+"===>"+bytes[i]);        }        

在Java代码中,为JNI准备了两个空的数组,JNI往数组里面放入数据,Java调用完以后,再从数组里面取出JNI放入的值,JNI代码如下:

 void JNICALL Java_com_test_vediochat_h264_H264Android_test(JNIEnv* env, jobject thiz, jintArray javaArray,jbyteArray array2) {   //方法一 /*   jint temp1 = 45,temp2 = 20;   (*env)->SetIntArrayRegion(env,javaArray,1,1,&temp1);   (*env)->SetIntArrayRegion(env,javaArray,2,1,&temp2);           */  //方法二:  jint * tempSize = (jint*) (*env)->GetIntArrayElements(env, javaArray, 0);  tempSize[2] = 65;  tempSize[3] = 75;   (*env)->SetIntArrayRegion(env, javaArray, 0,3,tempSize); }

从以上代码可以看出,有两种方法可以修改数组值,第一种方法是直接调用SetXXArrayRegion方法,其中第三个参数表示数组的下标,第四个参数表示要连续修改的长度。

第二种方法是先获得数组的指针,通过指针修改,修改后再调用SetXXArrayRegion方法提交到Java数组里面(如果不提交的话,不会修改Java数组元素的值)。

0 0
原创粉丝点击