java学习之JNI 学习五 处理数组

来源:互联网 发布:python 创建两个字典 编辑:程序博客网 时间:2024/05/17 05:50
  • 外理数组

    数组分为两种:

   1, 基本类型的数组

   2,对象类型(Object[])的数组

 

一个能通用于两种不同类型数组的函数:GetArrayLength(jarray array)

 

Get<TYPE>ArrayElements(<TYPE>Array arr, jboolean* isCopied);

这类函数可以把JAVA基本类型的数组转换到C/C++中的数组,有两种处理方式,一种是拷贝一份传回本地代码,另一个是把指向JAVA数组的指针直接传回本地代码,处理完本地化的数组后,通过Release<TYPE>ArrayElements来释放数组

 

Release<TYPE>ArrayElements(<TYPE>Array arr, <TYPE>* array, int mode)

用这个函数可以选择将如何处理JAVA跟C++的数组,是提交,还是撤销等等,内存释放还是不释放等

mode可以取下面的值:

0                     ->对JAVA的数组进行更新并释放C/C++的数组

JNI_COMMIT   ->对JAVA的数组进行更新但不释放C/C++的数组

JNI_ABORT      ->对JAVA的数组不进行更新,释放C/C++的数组

 

Get<TYPE>ArrayRegion(<TYPE>Array arr, jsize start, jsize len, <TYPE>* buffer)

在C/C++预先开辟一段内存,然后把JAVA基本类型的数组拷贝到这段内存中,与GetStringRegion原理相同

 

Set<TYPE>ArrayRegion(<TYPE>Array arr, jsize start, jsize len ,const <TYPE>* buffer)

把JAVA基本类型的数组中的指定范围的元素用C/C++的数组中元素来赋值

 

  • 处理数组----对象类型数组 

    JNI没有提供直接把JAVA的对象类型数组(Object[])直接转到C++中的jobject【】数组的函数,而是直接通过Get/SetObjectArrayElement这样的函数来对JAVA的Object[]数组进行操作

    注: 使用上述函数不用释放资源

 

    NewObjectArray可以通过指定长度跟初始值来创建某个类的数组

 

 

 

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 大门牙有蛀牙了怎么办 大门牙蛀牙黑了怎么办 大门牙蛀牙有洞怎么办 大门牙的缝蛀了怎么办 最里面的牙烂了怎么办 牙齿蛀了个洞怎么办办 牙齿痛怎么办才能治好? 门牙牙齿蛀掉了怎么办 吃了辣的牙齿痛怎么办 牙颈部楔状缺损怎么办 牙齿磨了很疼怎么办 小孩牙有窟窿疼怎么办 西瓜吃多了尿不停怎么办 吃了个西瓜不停拉肚子怎么办 例假完了又来了怎么办 肾上面有个肿瘤怎么办 膀胱壁毛糙增厚怎么办 痔疮手术后尿不出来怎么办 小牛肚一天不尿怎么办 小孩拉肚一直不好怎么办 尿涨但是尿很少怎么办 十四岁尿血医生说是肾炎怎么办 吃肉反胃想吐怎么办 母牛排尿带血尿发烧怎么办 4岁发烧40度怎么办 狗狗拉肚子咳漱哮喘怎么办 拉肚子拉脱水人无力怎么办 孕中期拉稀拉水怎么办 吃坏肚子拉稀水怎么办 手上起小疙瘩疼怎么办 手上长东西很痛怎么办 七八十斤猪拉稀怎么办 宝宝扁桃体化脓反复发烧怎么办 骑单车后膝盖痛怎么办 孩子一运动就喘怎么办 小孩晚上咳嗽很厉害怎么办 1岁宝宝夜里咳嗽怎么办 咳嗽咳的胸疼怎么办 儿童又咳又喘怎么办 咳嗽咳到胸口痛怎么办 咳嗽咳得肋骨疼怎么办