zoukankan      html  css  js  c++  java
  • JNI之数据类型

    1. JNIEnv 作用

    JNIEnv 概念 : 是一个线程相关的结构体, 该结构体代表了 Java 在本线程的运行环境 ;

    JNIEnv 与 JavaVM : 注意区分这两个概念;

    -- JavaVM : JavaVM 是 Java虚拟机在 JNI 层的代表, JNI 全局只有一个;

    -- JNIEnv : JavaVM 在线程中的代表, 每个线程都有一个, JNI 中可能有很多个 JNIEnv;

    JNIEnv 结构包括 JNI 函数表:即使提供了各种方法提供调用。

    JNIEnv 作用 :

    -- 调用 Java 函数 : JNIEnv 代表 Java 运行环境, 可以使用 JNIEnv 调用 Java 中的代码;

    -- 操作 Java 对象 : Java 对象传入 JNI 层就是 Jobject 对象, 需要使用 JNIEnv 来操作这个 Java 对象;

    2.jobject thiz

    二个参数的意义取决于该方法是静态还是实例方法(static or an instance method)。当本地方法作为一个实例方法时,第二个参数相当于对象本身,即 this. 当本地方法作为一个静态方法时,指向所在类.

    3.JNI基本数据类型对照表

    备注:

    1.JAVA层boolean 传入C层,转成uint8_t: true是1;false是0

    The following definition is provided for convenience.
    
    #define JNI_FALSE 0 
    #define JNI_TRUE 1

    2. The jsize integer type is used to describe cardinal indices and sizes:    

     typedef jint jsize;

    其实jsize就是jint;

     4.引用类型

    JNI包括多个引用类型对应不同的java对象。

    Java 层对象作为 opaque references(指针)传递到 JNI 层。 Opaque references 是一种 C 的指针类型,它指向 JavaVM 内部数据结构。使用这种指针的目的是:不希望 JNI 用户了解 JavaVM 内部数据结构。对 Opaque reference所指结构的操作,都要通过 JNI 方法进行. 比如,"java.lang.String"对象,JNI 层对应的类型为 jstring,对该 opaque reference 的操作要通过 JNIEnv->GetStringUTFChars 进行。

    备注:

    • 一定要按这种原则编程,千万不要为了效率或容易的取到某个值,绕过 JNI,直接操作opaque reference.
    • JNI 是一套完善接口,所有需求都能满足。
    • 在 JNI 中对象的基类即为 jobject. 为方便起见,还定义了 jstring,jclass,jobjectArray 等结构,他们都继承自 jobject。
  • 相关阅读:
    游戏的真实度
    91)Prometheus简单入门
    90)ubuntu 内核升级/降级系统内核(4.13.0)
    89)yaml文件语法
    使用格式工厂,把视频转为gif,画质受损,出现彩虹条模糊的情况
    fastadmin管理后台--带个人日程管理功能
    http响应--禁用缓存设置
    HTTP响应-302,304码的运用
    http请求详解 防盗链技术
    php支付宝支付接口开发(教程笔记)
  • 原文地址:https://www.cnblogs.com/H-BolinBlog/p/6094329.html
Copyright © 2011-2022 走看看