JNI(3)
基本类型
java 基本类型和 原始机器类型
Java Type
|
Native Type |
Description
|
---|---|---|
boolean
|
jboolean
|
unsigned 8
|
byte
|
jbyte
|
signed 8 bits
|
char
|
jchar
|
unsigned 16 bits
|
short
|
jshort
|
signed 16 bits
|
int
|
jint
|
signed 32 bits
|
long
|
jlong
|
signed 64 bits
|
float
|
jfloat
|
32 bits
|
double
|
jdouble
|
64 bits
|
void
|
void
|
N/A |
引用类型
JNI包含一定数量的与java对象已对应的引用类型
在C中,所有其他引用类型的定义是一样的:
typedef jobject jclass;
在C++中,JNI介绍一个套虚的类来加强与子类的关系:
class _jobject {}; class _jclass : public _jobject {}; ... typedef _jobject *jobject; typedef _jclass *jclass;
字段和方法IDs
方法和字段ids是普通的C类型指针:
struct _jfieldID; /* opaque structure */ typedef struct _jfieldID *jfieldID; /* field IDs */ struct _jmethodID; /* opaque structure */ typedef struct _jmethodID *jmethodID; /* method IDs */
值类型
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 VM的表示类型的标志。
Type Signature | Java Type |
---|---|
Z | boolean |
B | byte |
C | char |
S | short |
I | int |
J | long |
F | float |
D | double |
L
fully-qualified-class ; | fully-qualified-class |
[
type | type[] |
(
arg-types ) ret-type | method type |
例如:java 方法:
long f (int n, String s, int[] arr);对应的类型标识
(ILjava/lang/String;[I)J
修改UTFf-8的字符串
JNI使用修改的UTF-8字符串来代表不同的字符串类型。Java VM同样可以使用修改的UTF-8字符串。修改后的UTF-8字符串已编码过的,字符序列只包含非空的ASCII字符,每个字符可以只使用一个字节代表。