JNI编程(C/C++)
文章目录
第1节:快速上手
一个简单的demo,快速跑通流程,详见使用C/C++实现Java的Native方法接口(JNI)(1)快速上手
第2节:实例详解(C语言版本)
本节针对第1节中的内例子详细说明(C),详见使用C/C++实现Java的Native方法接口(JNI)(2)实例详解(C语言版本)
第3节:实例详解(C++语言版本)
本节针对第1节中的内例子详细说明(C++),详见使用C/C++实现Java的Native方法接口(JNI)(3)实例详解(C++语言版本)
第4节:JNI数据类型
Java里的数据类型分为primitive、Object以及[]型的数组。
Java的8种基础数据类型与C基础数据类型在jni.h里的映射关系如下:
Java primitive types | C primitive types | JNI typedef |
---|---|---|
int | long | jint |
long | _int64 | jlong |
byte | signed char | jbyte |
boolean | unsigned char | jboolean |
char | unsigned short | jchar |
short | short | jshort |
float | float | jfloat |
double | double | jdouble |
此外,jni.h里也定义了java的Object类的映射关系,虽然Class、String、Throwable等的最终超类都是Object,但是由于比较常用,因此有单独的定义和操作方法
Java object type | C type (defined in JNI) | JNI typedef |
---|---|---|
Object | _jobject* | jobject |
Class | _jclass* | jclass |
Throwable | _jthrowable* | jthrowable |
String | _jstring* | jstring |
[] | _jarray* | jarray |
注意,此处的jarray不是Array类,Array类会被映射为普通的Object,而是原始的用[]定义的数组。
基础数据类型不用赘述,因为这些在C都有对应的原生类型,主要看对于Object类型的数据相关的方法
第5节:jstring类和jobject类的等对象数据的方法
本节详细描述了JNI中最常用的jstring(java.lang.String)和jobject (Obejct)的相关操作方法,详见使用C/C++实现Java的Native方法接口(JNI)(5)jstring类和jobject类的等对象数据的方法
第6节:多种JNI数据类型的代码实例
本节结合前面1-5节的内容,编写了一个包含多种数据类型的实例JNI-C++代码,详见使用C/C++实现Java的Native方法接口(JNI)(6)多种JNI数据类型代码实例
附录:代码
整个项目的资源打包链接:JNI_C/C++_Demo