jni操作数组array
来源:互联网 发布:余文乐淘宝店铺叫什么 编辑:程序博客网 时间:2024/05/21 17:17
Java中的数组在jni中是jxxxArray类型,如jintArray
。
获取array长度
不同于c/c++语言,jni中获取array长度需要使用JNIEnv对象方法GetArrayLength(env, array)
来获取。
// 获取数组长度的不同语言不同方法//c-宏#define GET_ARRAY_LENGTH(array, len) {len = (sizeof(array)/sizeof(array[0]));}//c++-模板template <class T>int getArrayLength(T& array){ return sizeof(array) / sizeof(array[0]);}// jni-sum examplejint getSum(JNIEnv *env, jintArray values){ int i, sum=0; int length = (*env)->GetArrayLength(env, values); jint *body = (*env)->GetIntArrayElements(env, values, 0); for(i=0;i<length;i++) { sum += body[i]; } (*env)->ReleaseIntArrayElements(env, values, body, 0); return sum;}
jintArray
一般我们使用jintArray需要下面几部(代码在上面的例子中):
- GetArrayLength
获取数组长度。
- GetIntArrayElements
获取指向数组的指针。
- 使用c语言通常方法访问数组成员。
- 使用结束后使用ReleaseIntArrayElements
释放指针。
字符串数组的一个例子
// 合并字符串数组为一个字符串,每个子串之间用“#分隔int getStringLen(JNIEnv *, jobjectArray);void joinStrings(JNIEnv *, char*, jobjectArray);JNIEXPORT jstring JNICALL Java_com_mislead_testjni_TestJni_joinStrings (JNIEnv *env, jobject jobj, jobjectArray strs){ int outLen=getStringLen(env, strs); char result[outLen]; joinStrings(env, result, strs); return (*env)->NewStringUTF(env, result);}int getStringLen(JNIEnv *env, jobjectArray strs){ int i, len = 0; int array_len = (*env)->GetArrayLength(env, strs); for (i=0;i<array_len;i++) { jobject obj=(*env)->GetObjectArrayElement(env, strs, i); len+=(*env)->GetStringUTFLength(env, (jstring) obj); } //因为有分隔字符所以这里我们计算总长度的时候要加上分隔字符数量(这里不严谨) return len + array_len;}void joinStrings(JNIEnv *env, char *out, jobjectArray strs){ int array_len=(*env)->GetArrayLength(env, strs); int i; for (i=0;i<array_len;i++) { jstring jword=(jstring)(*env)->GetObjectArrayElement(env, strs, i); const char *word=(*env)->GetStringUTFChars(env, jword, 0); if(i>0) { //拼接字符串 LOGE("%d:%s", i, out); strcat(out, "#"); strcat(out, word); } else { //复制字符串 strcpy(out, word); } (*env)->ReleaseStringUTFChars(env, jword, word); }}
0 0
- jni操作数组array
- JNI操作数组
- JNI操作数组
- jni数组操作
- android jni操作数组
- JNI操作数组代码
- android jni操作数组
- JNI操作数组
- Android JNI数组操作
- flex数组操作---Array
- Array 数组 操作
- js Array数组操作
- JS ARRAY 数组操作
- JS ARRAY 数组操作
- array数组‘查找’操作
- Swift-Array数组操作
- array 二维数组操作
- PHP array数组操作
- android-----View工作原理系列(三)
- java学习:java程序员进阶之路
- iOS APP提交上架最新流程
- 操作系统精髓与设计原理(原书第6版)——学习笔记(7)
- SVN服务器的本地搭建和使用
- jni操作数组array
- 解决Ubuntu远程连接mysql连不上的问题
- HDU2333 Assemble 二分
- POI创建excel中的FileUtils.openOutputStream()
- IDEA启动配置列出项目列表
- Android生命周期中的onPause()和onStop()
- java 中 使用冒号 for 循环
- Java之下载word文档
- Java初学者:String类