zoukankan      html  css  js  c++  java
  • JNI_Z_10_Java的数组

    在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、

  • 相关阅读:
    Halcon算子翻译——else
    Halcon算子翻译——default
    halcon算子翻译——continue
    Halcon算子翻译——catch
    Halcon算子翻译——case
    生命周期
    输入流输出流
    在搜索引擎中输入汉字就可以解析到对应的域名,请问如何用LoadRunner进行测试。
    给你一个网站,你如何测试?
    你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决?
  • 原文地址:https://www.cnblogs.com/javaskill/p/5435545.html
Copyright © 2011-2022 走看看