《Java 本地接口规范》-JNI 的类型和数据结构
来源:互联网 发布:分享淘宝宝贝 编辑:程序博客网 时间:2024/04/29 18:39
JNI 的类型和数据结构
本章讨论 JNI 如何将 Java 类型映射到本地 C 类型。
基本类型
表 3-1 描述Java 基本类型及其与计算机相关的本地等效类型。
表 3-1 基本类型和本地等效类型
Java 类型
本地类型
说明
boolean
jboolean
无符号,8 位
byte
jbyte
无符号,8 位
char
jchar
无符号,16 位
short
jshort
有符号,16 位
int
jint
有符号,32 位
long
jlong
有符号,64 位
float
jfloat
32 位
double
jdouble
64 位
void
void
N/A
为了使用方便,特提供以下定义。
#define JNI_FALSE 0
#define JNI_TRUE 1
jsize 整数类型用于描述主要指数和大小:
typedef jint jsize;
引用类型
JNI 包含了很多对应于不同 Java 对象的引用类型。JNI 引用类型的组织层次如图3-1 所示。
图 3-1 引用类型层次
在 C 中,所有其它 JNI 引用类型都被定义为与 jobject 一样。例如:
typedef jobject jclass;
在 C++ 中,JNI 引入了虚构类以加强子类关系。例如:
class _jobject {};
class _jclass : public _jobject {};
...
typedef _jobject *jobject;
typedef _jclass *jclass;
域 ID 和方法 ID
方法 ID 和域 ID 是常规的 C 指针类型:
struct _jfieldID; /*不透明结构 */
typedef struct _jfieldID *jfieldID; /* 域 ID */
struct _jmethodID; /* 不透明结构 */
typedef struct _jmethodID *jmethodID; /* 方法 ID */
值类型
jvalue 联合类型在参数数组中用作单元类型。其声明方式如下:
typedef union jvalue {
jboolean z;
jbyte b;
jchar c;
jshort s;
jint i;
jlong j;
jfloat f;
jdouble d;
jobject l;
} jvalue;
类型签名
JNI 使用 Java 虚拟机的类型签名表述。表 3-2 列出了这些类型签名。
表 3-2 Java 虚拟机类型签名
类型签名
Java 类型
Z
boolean
B
byte
C
char
S
short
I
int
J
long
F
float
D
double
L fully-qualified-class ;
全限定的类
[ type
type[]
( arg-types ) ret-type
方法类型
例如,Java 方法:
long f (int n, String s, int[] arr);
具有以下类型签名:
(ILjava/lang/String;[I)J
UTF-8字符串
JNI 用 UTF-8 字符串来表示各种字符串类型。UTF-8 字符串和 Java 虚拟机所使用的一样。UTF-8 字符串的编码方式使得仅包含非空 ASCII 字符的字符序列能够按每字符一个字节表示,但是最多只能表示 16 位的字符。所有在\u0001
到\u007F
范围内的字符都用单字节表示,如下所示:
字节中的七位数据确定了所表示字符的值。空字符 (\u000
) 和 \u0080
到\u07FF
范围内的字符用一对字节表示, 即x 和 y,如下所示:
值为 ((x&0x1f)<<6)+(y&0x3f)
的字符需用两个字节表示。
\u0800
到 \uFFFF
范围内的字符用三个字节表示,即 x,y,和 z:
值为 ((x&0xf)<<12)+(y&0x3f)<<6)+(z&0x3f)
的字符需用三个字节表示。
此格式与“标准” UTF-8 格式之间有两个区别。第一,空字节 (byte)0
使用双字节格式进行编码,而不是单字节格式。这意味着 Java 虚拟机的 UTF-8 字符串不可能有嵌入的空值。第二,只使用单字节、双字节和三字节格式。Java 虚拟机不能识别更长的 UTF-8 格式。
- 《Java 本地接口规范》-JNI 的类型和数据结构
- Java本地接口(JNI)编程指南和规范(序言)
- Java本地接口(JNI)编程指南和规范(第二章)
- Java本地接口(JNI)编程指南和规范(第三章)
- Java本地接口(JNI)编程指南和规范(第四章)
- Java本地接口(JNI)编程指南和规范(第五章)
- Java本地接口(JNI)编程指南和规范(第六章)
- Java本地接口(JNI)编程指南和规范(第七章)
- Java本地接口(JNI)编程指南和规范(第八章)
- Java本地接口(JNI)编程指南和规范(第九章)
- Java本地接口(JNI)编程指南和规范(第十章)
- Java本地接口(JNI)编程指南和规范(第十一章)
- Java本地接口(JNI)编程指南和规范(第十二章)
- Java本地接口(JNI)编程指南和规范(第五章)
- Java本地接口(JNI)编程指南和规范(第一章)
- Java本地接口(JNI)编程规范与指南译文和练习
- 《Java 本地接口规范》- JNI 函数(一)
- 《Java 本地接口规范》- JNI 函数(二)
- 64位Windows操作系统“ ORA-12154: TNS: 无法解析指定的连接标识” 的解决方法
- 创始人和VC的推荐:企业家应该读读这21本书
- 对比C++和Java
- 3.12 lazy class(冗赘类)
- 在struts.xml中加入DelegatingRequestProcessor
- 《Java 本地接口规范》-JNI 的类型和数据结构
- 线性表练习一
- ESFramework Demo -- 入门Demo,简单的即时通讯系统(附源码)
- 关于ResultSet.execute()方法返回值的解析!!!
- webcast
- NDK在Ubuntu环境下的配置
- java.lang.OutOfMemoryError: PermGen space及其解决方法
- Fidel Alejandro Castro Ruz
- 应急与指挥系统的运用