JNI对数组赋值排序,创建数组并返回给Java
2016-12-30 19:37
483 查看
创建两个native方法
//传递数组,操作后,返回 public native void passArrayMethod(int[] arr); //创建指定长度数组 public native int[] createArrayMethod(int len);1
2
3
4
5
1
2
3
4
5
生成对应的c函数
JNIEXPORT void JNICALL Java_com_test_git_jnidemo_JniUtil_JniDemo_passArrayMethod (JNIEnv *, jobject, jintArray); JNIEXPORT jintArray JNICALL Java_com_test_git_jnidemo_JniUtil_JniDemo_createArrayMethod (JNIEnv *, jobject, jint);1
2
3
4
5
1
2
3
4
5
传递数组给JNI,修改第一个元素值,然后排序
int com(const void *a, const void *b){ return *(int *)a - *(int *)b;//升序 } JNIEXPORT void JNICALL Java_com_test_git_jnidemo_JniUtil_JniDemo_passArrayMethod (JNIEnv *env, jobject jobj, jintArray jarr){ //1.获取数组指针 jint *arr = env->GetIntArrayElements(jarr, NULL); *arr = 100; //2.获取数组长度 int len = env->GetArrayLength(jarr); //3.排序 qsort(arr, len, sizeof(jint), com); //4.释放资源 env->ReleaseIntArrayElements(jarr, arr, JNI_COMMIT); // env->ReleaseIntArrayElements(jarr, arr, JNI_ABORT); // 对于最后一个参数(如果指针指向的数组为副本时,否则该参数不起作用) // 0 copy back the content and free the elems buffer // JNI_COMMIT copy back the content but do not free the elems buffer // JNI_ABORT free the buffer without copying back the possible changes };1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
JNI生成数组,并返回
JNIEXPORT jintArray JNICALL Java_com_test_git_jnidemo_JniUtil_JniDemo_createArrayMethod (JNIEnv *env, jobject jobj, jint len){ //1.新建长度len数组 jintArray jarr = env->NewIntArray(len); //2.获取数组指针 jint *arr = env->GetIntArrayElements(jarr, NULL); //3.赋值 int i = 0; for(; i < len; i++){ arr[i] = i; } //4.释放资源 env->ReleaseIntArrayElements(jarr, arr, 0); //5.返回数组 return jarr; };1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
MainActivity中调用
int[] arr = {1, 3, 2, 6, 8, 0}; Log.i(TAG, "arr修改前: " + getArrayString(arr)); jd.passArrayMethod(arr); Log.i(TAG, "arr修改后: " + getArrayString(arr)); Log.i(TAG, "------------------------------------------"); int[] arr_new = jd.createArrayMethod(10); Log.i(TAG, "arr_new: "+ getArrayString(arr_new) );1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
输出结果:
09-26 17:02:29.454 994-994/com.test.git.jnidemo I/MainActivity-: arr修改前: ,1,3,2,6,8,0 09-26 17:02:29.454 994-994/com.test.git.jnidemo I/MainActivity-: arr修改后: ,0,2,3,6,8,100 09-26 17:02:29.454 994-994/com.test.git.jnidemo I/MainActivity-: ------------------------------------------ 09-26 17:02:29.454 994-994/com.test.git.jnidemo I/MainActivity-: arr_new: ,0,1,2,3,4,5,6,7,8,9
相关文章推荐
- JNI对数组赋值排序,创建数组并返回给Java
- JNI对数组赋值排序,创建数组并返回给Java
- JNI之c/c++返回中文给java 乱码问题以及java数组在c排序
- 关于C++调用jar包,在创建虚拟机时使用JNI_CreateJavaVM调用失败返回-1的问题
- FLEX4.7 与Java后台交互返回json格式的数组 并赋值给前台datagrid
- JNI开发之创建int数组返回
- 黑马程序员-Java数组声明、创建、初始化、及排序
- java数组赋值,排序,遍历
- jni java与c++交互返回三维数组jobjectArray
- java数组的创建赋值
- 编写一个JAVA程序,创建指定长度的 int 型数组,并生成 100 以内随机数为数组中的每个元素赋值,然后输出数组
- java小程序——给数组随机赋值,查找输入的值以及冒泡和选择排序数组并输出
- JNI返回自定义结构体数组到Java
- android中使用jni 在c++层返回一个数组到java
- java笔试题,对int数组排序后用String返回
- Java基本功练习五(一维数组相关操作[声明、创建、乱序、排序、查找]和方法的重载举例[浅议])
- Java—java中如何实现动态数组的创建与赋值
- Java中解锁数组正确姿势以及赋值,foreach遍历?,Java自带的对数组排序,比较等等的静态方法总结
- JNI开发之java传入数组并对其排序
- 编写一个Java程序,创建制定长度的int型数组,并生成100以内的随机数为数组的每个元素赋值