前言

简单记录一下JNI数组操作。

正文

  1. public class Hello {
  2.   static {
  3.       System.loadLibrary("Hello");
  4.   }
  5.   // JNI中对数组排序
  6.   public static native int[] sortInt(int [] buffer);
  7.   // JNI创建数组
  8.   public static native int [] newIntArray();
  9. }
复制

还在在之前的基础改,这里只附上部分代码

  1. JNINativeMethod method_table[] = {
  2.       {"sortInt", "([I)[I", (void *) native_sort_int},
  3.       {"newIntArray", "()[I", (void *) native_new_Int_Array},
  4. };
复制

sortInt

  1. JNIEXPORT jintArray
  2. JNICALL native_sort_int(JNIEnv *env, jclass jclazz, jintArray buffer) {
  3.   //获取Java数组长度
  4.   int length = env->GetArrayLength(buffer);
  5.   LOGD("native_sort_int length : %d", length);
  6.   //转换为指针
  7.   int *arrayP = env->GetIntArrayElements(buffer, NULL);
  8.   int i = 0;
  9.   int j = 0;
  10.   int temp = 0;
  11.   //排序从大到小
  12.   for (i = 0; i < length - 1; i++) {
  13.       for (j = i + 1; j < length; j++) {
  14.           if (arrayP[i] < arrayP[j]) {
  15.               temp = arrayP[i];
  16.               arrayP[i] = arrayP[j];
  17.               arrayP[j] = temp;
  18.           }
  19.       }
  20.   }
  21.   //转化为jintArray
  22.   //env->SetIntArrayRegion(buffer, 0, length, arrayP);
  23.   //把修改写回原数组并且释放本地数组
  24.   env->ReleaseIntArrayElements(buffer, arrayP, 0);
  25.   return buffer;
  26. }
复制

newIntArray

  1. JNIEXPORT jintArray
  2. JNICALL native_new_Int_Array(JNIEnv *env, jclass jclazz) {
  3.   int num = 10;
  4.   // 1. 创建一个Java的int数组
  5.   jintArray array = env->NewIntArray(num);
  6.   // 2. 获取数组指针
  7.   jint *arrayP = env->GetIntArrayElements(array, NULL);
  8.   // 3. 初始化
  9.   int i = 0;
  10.   for (; i < num; i++) {
  11.       arrayP[i] = i;
  12.   }
  13.   // 4. 把修改写回原数组并且释放本地数组
  14.   env->ReleaseIntArrayElements(array, arrayP, 0);
  15.   return array;
  16. }
复制

参考文章

  1. NDK/JNI 中Java和C/C++互相传递数组

  2. JNI基本类型数组操作

  3. JNI之函数介绍四之数组操作

相关文章

暂无评论

none
暂无评论...