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。
最新文章
- php函数的传值如果需要引用传递注意的细节
- 编译安装apache下添加mod_rewrite支持
- 定位程序问题的方法 -- clwu
- [状压dp]HDOJ3182 Hamburger Magi
- Java-Swing嵌入浏览器(二)
- iOS10隐私设置及相应问题
- Javascript标准类型的方法集
- ice使用过程遇到的问题
- LeetCode OJ 202. Happy Number
- wps 操作
- LeetCode算法题-Reverse Words in a String III(Java实现)
- 20155203 2016-2017-3 《Java程序设计》第5周学习总结
- 关于 URL 编码及 JavaScript 编码函数【转载+整理】
- Java除法和js
- node.js 连接 sql server 包括低版本的sqlserver 2000
- Caffe on Windows (Visual Studio 2015+CUDA8.0+cuDNNv5)
- netsnmp编译动态库
- python模块--os模块、sys模块
- UI“三重天”之实践Uiautomator1
- phpstudy启动时Apache启动不了
热门文章
- 带依赖包的maven打包配置
- AngularJs学习——实现列表内容项的增加删除
- 基于MapReduce的手机流量统计分析
- bzoj3779: 重组病毒 link-cut-tree
- HDU 4334 Trouble (数组合并)
- [bzoj3597][scoi2014]方伯伯运椰子——分数规划,负环
- Local Authentication Using Challenge Response with Yubikey for CentOS 7
- Linux服务器中毒事件(libudev.so)
- 干货:MySQL数据库优化参考
- [Leetcode Week5]Word Ladder II