美文网首页
5.JIN:操作数组

5.JIN:操作数组

作者: BUG弄潮儿 | 来源:发表于2023-04-18 22:19 被阅读0次

1. 数组的分类

  • 数组分为两种
  1. 基本数据类型的数组

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

  • 一个能通用于两种不同数据类型数组的函数
GetArrayLength( jarray array);//获取长度

2. 基本数据类型数组

  • 处理基本数据类型数组的时候,也是跟处理字符串类型,有很相似的函数
Get<TYPE>ArrayElements( <TYPE>Array arr, jboolean* isCopied);

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

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

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

mode 可以取下面的值:

  1. 0 对Java的数组进行更新,并释放 C/C++ 的数组

  2. JNI_COMMIT 对Java的数组进行更新,但是不释放C/C++的数组

  3. JNI_ABORT 对Java的数组不进行更新,释放C/C++的数组

  • JDK 1.2 为了增加直接传回指向 Java 数组的指针,而增加了以下函数。但是同样的,也会有同GetStringCritical的死锁问题
GetPrimitiveArrayCritical( jarray arr, jboolan* isCopied);
ReleasePrimitiveArrayCritical(jarray arr, void array, jint mode);
  • 在C/C++预先开辟一块内存,然后把Java基本数组类型的数组拷贝到这块内存当中。跟GetStringRegion原理相似
Get<TYPE>ArrayRegion( <TYPE>Array arr, jsize, start, jsize len, <TYPE>* buffer);
  • 把Java基本数据类型的数组中的指定范围的元素用 C/C++的数组中的元素来赋值
Set<TYPE>ArrayRegion( <TYPE>Array arr, jsize start, jsize len, const <TYPE>* buffer );
  • 指定一个长度,然后返回相应Java基本类型的数组
<TYPE>Array New<TYPE>Array( jsize len );

3. 对象类型数组

Object[]

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

相关文章

  • 数组

    数组定义: 元素类型 数组操作 Range 数组的批量操作 遍历

  • 迟到的Swift入门 - 数组操作

    Swift数组操作 1. 数组的日常操作 1.0 声明数组 初始化空数组 初始化默认值的数组 2. 数组基本操作 ...

  • 2. Numpy使用

    numpy的基本操作 生成数组 数组的基本操作 数组的运算 数组间的运算

  • 数组和对象的操作

    数组操作方法 数组中splice的操作(改变的是原数组,返回结果是分割的数组) 数组中slice的操作(不改变原数...

  • Matrix01-03:ndarray数组的操作

    ndarray数组的操作 数组数据转换数组形状变换数组数据选择与操作数组计算处理数组算术运算 一、数组数据转换 注...

  • js基础之数组方法

    数组简单操作 数组合并 数组排序

  • 基本dom操作,数组操作

    dom操作 数组操作

  • java笔记5

    数组的定义 数组的内存分配及特点 数组操作常见问题 数据常见操作 数组中的数组 @Test public void...

  • 数组类常用操作方法

    一、数组 二、不可变数组(NSArray) 三、不可变数组的操作 四、可变数组(NSMutableArray)的操作

  • JavaScript 数组方法整理大全

    一、常用的数组方法★ 直接操作影响原数组的方法: ★ 直接操作不影响原数组的方法: ★ 直接操作有可能影响到原数组...

网友评论

      本文标题:5.JIN:操作数组

      本文链接:https://www.haomeiwen.com/subject/gkhtjdtx.html