Java 本地调用 JNI 使用规范详解
一、 JNI 概述
JavaNative Interface 的缩写,中文为 Java 本地调用。从 Java1.1 开始,JNI 即成为
Java 标准的一部分。
JNI 设计的目的是为了允许 Java 代码与其他语言进行交互。但这样做通常会导致丧失
平台可移植性,通常是在特定的需求下进行,例如使用旧的其他语言的库、需要获得 Java
类库不支持的某种基于具体平台的特性、大量数学计算性能优化等。
二、 JNI 数据类型和数据结构
1.基本类型
JNI 基本类型和本地等效类型的对应表格如下:
Java 类型 本地类型 说明
boolean jboolean
无符号,8 位
byte jbyte
无符号,8 位
char jchar
无符号,16 位
short jshort
有符号,16 位
int jint
有符号,32 位
long jlong
有符号,64 位
oat joat
32 位
double jdouble
64 位
void void
无
为了使用方便,还提供了如下定义:
#de!ne JNI_FALSE 0
#de!ne JNI_TRUE 1
Jsize 类型用于描述主要指数和大小:
typedef jint jsize;
2.引用类型
除了基本类型外,JNI 还包含了很对对应于不同 Java 对象的引用类型,JNI 引用类型
的组织层次如下图所示:
在 C 语言中,所有其他 JNI 引用类型都被定义为与 jobject 一样,例如:
typedef jobject jclass;
在 C++中,JNI 引入虚构类以加强子类关系,例如:
class _jobject{};
class _jstring : public jobject{};
…
typedef _jobject jobject;
typedef _jstring jstring;
3.方法 ID 和域 ID