JNI的数据类型
基本类型
JNI类型 | Java类型 | 描述 |
---|---|---|
jbyte | byte | 有符号,8位,整型 |
jshort | short | 有符号,16位,整型 |
jint | int | 有符号,32位,整型 |
jlong | long | 有符号,64位,整型 |
jfloat | float | 32位,浮点型 |
jdouble | double | 64位,浮点型 |
jboolean | boolean | 无符号,8位,整型 |
jchar | char | 无符号,16位,整型 |
void | void | N/A |
引用类型
JNI类型 | Java类型 | 描述 |
---|---|---|
jclass | Class | 类 |
jobject | Object | Java对象 |
jstring | String | 字符串 |
jobjectArray | Object[] | 对象数组 |
jbyteArray | byte[] | byte数组 |
jshortArray | short[] | short数组 |
jintArray | int[] | int数组 |
jlongArray | long[] | long数组 |
jfloatArray | float[] | float数组 |
jdoubleArray | double[] | double数组 |
jbooleanArray | boolean[] | boolean数组 |
jcharArray | char[] | char数组 |
jthrowable | Throwable | Throwable |
jmethodID、jfieldID
jmethodID可用于获取类中函数的标识,然后通过此标识来调用函数。
jfieldID可用于获取类中变量的标识,然后通过此标识来读写变量。
JNI的类型签名
- JNI的类型签名标识了一个特定的Java类型,这个类型可以是类、方法或数据类型。
类和对象的签名
-
采用
L+包名+类名+;
的形式,且将包名中的.替换为/。如:
java.lang.String
的签名为Ljava/lang/String;
,注意末尾的;也是签名的一部分。
基本数据类型的签名
-
基本数据类型的签名是有规律的。
- 一般为首字母的大写;
- boolean用Z,因为B被byte占用了;
- long用J,因为L用来表示类的签名。
Java类型 | 签名 |
---|---|
byte | B |
short | S |
int | I |
long | J |
float | F |
double | D |
boolean | Z |
char | C |
void | V |
数组的签名
- 一维数组的签名就是
[+类型签名
。
Java类型 | 签名 |
---|---|
Object[] | [Ljava/lang/Object |
String[] | [Ljava/lang/String |
byte[] | [B |
short[] | [S |
int[] | [I |
long[] | [J |
float[] | [F |
double[] | [D |
boolean[] | [Z |
char[] | [C |
-
多维数组的签名就是
n个[+类型签名
,其中n表示数组的维度。如:
int[][]
的签名为[[I
。
方法的签名
-
方法的签名为:(各参数类型签名)返回值类型签名。
如:
int func1()
的签名为()I
。如:
void func2(int i)
的签名为(I)V
。如:
boolean func3(int a, double b, String[] c)
的签名为(ID[Ljava/lang/String)Z
。