前言

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

正文

public class Hello {
    static {
        System.loadLibrary("Hello");
    }
    // JNI中对数组排序
    public static native int[] sortInt(int [] buffer);
    // JNI创建数组
    public static native int [] newIntArray();
}

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

JNINativeMethod method_table[] = {
        {"sortInt", "([I)[I", (void *) native_sort_int},
        {"newIntArray", "()[I", (void *) native_new_Int_Array},
};

sortInt

JNIEXPORT jintArray
JNICALL native_sort_int(JNIEnv *env, jclass jclazz, jintArray buffer) {
    //获取Java数组长度
    int length = env->GetArrayLength(buffer);
    LOGD("native_sort_int length : %d", length);
    //转换为指针
    int *arrayP = env->GetIntArrayElements(buffer, NULL);
    int i = 0;
    int j = 0;
    int temp = 0;
    //排序从大到小
    for (i = 0; i < length - 1; i++) {
        for (j = i + 1; j < length; j++) {
            if (arrayP[i] < arrayP[j]) {
                temp = arrayP[i];
                arrayP[i] = arrayP[j];
                arrayP[j] = temp;
            }
        }
    }
    //转化为jintArray
    //env->SetIntArrayRegion(buffer, 0, length, arrayP);
    //把修改写回原数组并且释放本地数组
    env->ReleaseIntArrayElements(buffer, arrayP, 0);
    return buffer;
}

newIntArray

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

参考文章

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

  2. JNI基本类型数组操作

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

相关文章

暂无评论

none
暂无评论...