代码改变世界

JNI(3)

2013-07-22 16:50  java20130722  阅读(216)  评论(0编辑  收藏  举报

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 SignatureJava 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字符,每个字符可以只使用一个字节代表。