在Java中数组分为两种:
  (1)、基本类型数组
  (2)、对象类型(Object[])的数组 (数组中存放的是指向Java对象中的引用)

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

首先来看一下怎么处理基本类型的数组 :
  (1) Get<Type>ArrayElements(<Type>Array arr, jboolean* isCopide);
  这类函数可以把Java基本类型的数组转换到C/C++中的数组,有两种处理方式,一种是拷贝一份传回本地代码,另一个是把指向Java数组的指针直接传回到本地代码中,处理完本地化的数组后,通过Release<Type>ArrayElements来释放数组

  (2) Release<Type>ArrayElements(<Type>Array arr , <Type>* array , jint mode)
  用这个函数可以选择将如何处理Java跟C++的数组,是提交,还是撤销等,内存释放还是不释放等
  mode可以取下面的值:
    0 :      对Java的数组 更新释放C/C++的数组
    JNI_COMMIT(1) :对Java的数组 更新不释放C/C++的数组
    JNI_ABORT(2): 对Java的数组 不更新释放C/C++的数组

  (3) GetPrimittiveArrayCritical(jarray arr , jboolean* isCopied);
  (4) ReleasePrimitiveArrayCritical(jarray arr , void* array , jint mode);
  也是JDK1.2出来的,为了增加直接传回指向Java数组的指针而加入的函数,同样的也会有同GetStringCritical的死锁的问题

  (5) Get<Type>ArrayRegion(<Type>Array arr , jsize start , jsize len , <Type>* buffer);
  在C/C++预先开辟一段内存,然后把Java基本类型的数组拷贝到这段内存中,这个方法和之前拷贝字符串的GetStringRegion方法的原理是类似的

  (6) Set<Type>ArrayRegion(<Type>Array arr , jsize start , jsize len , const <Type>* buffer);
  把Java基本类型的数组中的指定范围的元素用C/C++的数组中的元素来赋值

  (7) <Type>Array New<Type>Array(jsize sz)
  指定一个长度然后返回相应的Java基本类型的数组

在来看一下怎么处理对象型数组 :
  JNI没有提供直接把Java的对象类型数组(Object[])直接转到C++中的Object[]数组的函数,而是直接通过GetObjectArrayElement/SetObjectArrayElement这样的函数来对Java的Object[]数组进行操作由于取的对象数组没有进行拷贝,所以不需要释放任何资源
  NewObjectArray可以通过指定长度初始值来创建某个类的数组

1、

2、

3、

4、

5、

JNI_Z_10_Java的数组的更多相关文章

  1. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  2. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  3. 编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议75~78)

    建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法 ...

  4. 了解PHP中的Array数组和foreach

    1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组    . 2.例子:一般的数组 这里,我 ...

  5. JavaScript权威指南 - 数组

    JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...

  6. JavaScript常见的五种数组去重的方式

    ▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 先来建立一个数组 var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN ...

  7. js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的

    题目: 给Array对象原型上添加一个sameStructureAs方法,该方法接收一个任意类型的参数,要求返回当前数组与传入参数数组(假定是)相对应下标的元素类型是否一致. 假设已经写好了Array ...

  8. javascript数组查重方法总结

    文章参考地址:http://blog.csdn.net/chengxuyuan20100425/article/details/8497277 题目 对下列数组去重: var arr = ['aa', ...

  9. 掌握javascript中的最基础数据结构-----数组

    这是一篇<数据结构与算法javascript描述>的读书笔记.主要梳理了关于数组的知识.部分内容及源码来自原作. 书中第一章介绍了如何配置javascript运行环境:javascript ...

随机推荐

  1. AsyncTaskLoader设计原理大揭秘

    简介 在Android异步处理之AsyncTaskLoader简单使用中我简单的介绍了一下AsyncTaskLoader的基本用法和使用场景,对AsyncTaskLoader还不是很熟悉的小伙伴可以先 ...

  2. 版本号风格为 Major.Minor.Patch

    旧版本兼容 · 小程序 https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html 微信客户端和小程序基 ...

  3. 接口测试工具 — jmeter(参数化)

    1.用户定义的变量 添加一个用户定义的变量 添加变量值 2.函数生成器 函数生成 随机数生成 取当前时间 3.从文件中读取 1)新建一个TXT文档,录入数据 2)读取文件 3)使用数据,用 ${pho ...

  4. django 多数据库时 ORM语句 选择数据库

    多数据库时ORM语句选择数据库 不需要save的操作: 查询(删除的话查询语句后面加一个.delete()即可,修改的话在后面加一个.update()即可): models.表名.objects.us ...

  5. export,import ,export default的区别

    首先要知道export,import ,export default是什么 ES6模块主要有两个功能:export和importexport用于对外输出本模块(一个文件可以理解为一个模块)变量的接口i ...

  6. Linux环境Oracle相关操作命令行

        打开Oracle监听:lsnrctl start          关闭监听:   lsnrctl stop 监听关闭那么客户端无法连接 进入sqlplus:sqlplus /nolog  使 ...

  7. linux环境变量配置文件

    环境变量配置文件中主要是定义对系统操作环境生效的系统默认环境变量,如PATH等.当你登陆Linux系统启动一个bash shell时,默认情况下bash会几个文件中查找命令,bash检查的启动文件取决 ...

  8. Hadoop2.0NameNode HA和Federation实践

    一.背景 天云趋势在2012年下半年开始为某大型国有银行的历史交易数据备份及查询提供基于Hadoop的技术解决方案,由于行业的特殊性,客户对服务的可 用性有着非常高的要求,而HDFS长久以来都被单点故 ...

  9. Java io流详解三

    public class IOpractise { public void iotest() { int b= 0; FileInputStream fis = null; try { fis = n ...

  10. Codeforces Round #468(div2)

    A Friends Meeting 题意:有两个人在数轴上的不同位置,现在他们需要到一个位置碰面.每次每人只能向左或向右走1个单位,轮流进行.每个人第一次走时疲劳度+1,第二次走时疲劳度+2,以此类推 ...