现在的位置: 首页 > 综合 > 正文

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

2018年02月24日 ⁄ 综合 ⁄ 共 951字 ⁄ 字号 评论关闭
  • 外理数组

    数组分为两种:

   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可以通过指定长度跟初始值来创建某个类的数组

 

 

 

 

抱歉!评论已关闭.