JNI: Signature
在上篇文章中的映射表结构体中简单提了一下Signature.What's the Signature?【方法签名概念】java与c/c++相互调用时,表示函数参数的描述符。描述符的存在是因为在相互调用的时候是在JVM中建立了一张映射表。可以把它想象成一张map表.其key是关键的字符串,value是函数指针。通过key找到对应的函数指针,通过java虚拟机去调用函数指针,就实现了相互调用。...
·
在上篇文章中的映射表结构体中简单提了一下Signature.
What's the Signature?【方法签名概念】
- java与c/c++相互调用时,表示函数参数的描述符。描述符的存在是因为在相互调用的时候是在JVM中建立了一张映射表。可以把它想象成一张map表.其key是关键的字符串,value是函数指针。通过key找到对应的函数指针,通过java虚拟机去调用函数指针,就实现了相互调用。
如何创建上面说到的key?
通用的做法是函数名与参数结合起来构成一个key,这样的一个key就不会产生不唯一性。
Signature就是描述函数方法的输入输出参数。将这个描述符和函数名拼接在一起就构成了关键的唯一的key.
- 输入参数放在()内,输出参数放在()外
- 多个参数之间顺序存放,用分号(;)分割
原始类型的Signature:
Java类型 | 符号 |
boolean | Z |
byte | B |
char | C |
short | S |
int | I |
long | L |
float | F |
double | D |
void | V |
类的Signature:
- Java对象参数"L包路径/类名"
- Java数组 "【"
例如: ([YinLei;)[Lyinlei;
输入参数是YinLei的这个类的数组。输出参数不是原始类型,是自定义的一个类。
等价于 YinLei[] xxx(YinLei[]);
([Ljava/lang/String;)[Ljava/lang/Object:等价于Object[] xxx(String[] s)
更多推荐
所有评论(0)