JNI 数据类型转换、JNI签名

类型转换

Java数据分为基本数据类型和引用数据类型,JNI层也是区别对待这两种类型的。下面是基本数据类型的类型转换

Java Native类型 符号类型 字长
boolean jboolean 无符号 8位
byte jbyte 无符号 8位
char jchar 无符号 16位
short jshort 有符号 16位
int jint 有符号 32位
long jlong 有符号 64位
float jfloat 有符号 32位
double jdouble 有符号 64位

Java引用数据类型转换

Java引用类型 Native类型 Java引用类型 Native类型
All object jobject char[ ] jcharArray
java.lang.Class 实例 jclass short[ ] jshortArray
java.lang.String 实例 jstring int[ ] jintArray
Object[ ] jobjectArray long[ ] jlongArray
boolean[ ] jbooleanArray float[ ] jfloatArray
byte[ ] jbyteArray double[ ] jboubleArray
java.lang.Throwable 实例 jthrowable

JNI 签名

因为Java支持方法重载,所以native层调用Java层方法时需要方法的签名,这样来唯一找到目标函数。

类型标识示意表

类型标识 Java 类型 类型标识 Java 类型
Z boolean F float
B byte D double
C char Ljava/lang/String String
S short [I int[ ]
I int [Ljava/lang/Object Object[ ]
J long

几个函数签名例子

函数签名 Java 函数
"()Ljava/lang/String;" String f()
"(ILjava/lang/Class;)J" long f(int i, Class c)
"([B)V" void f(byte[ ] bytes)

你可能感兴趣的:(JNI 数据类型转换、JNI签名)