Java语言是基于C语言实现的,Java底层的很多API都是通过JNI(Java Native Interface)来实现的。
通过JNI
接口C/C++和Java可以互相调用(存在跨平台问题)
JNI-定义native
在java中如果想调用native
需要先在类中定义一个nantive
方法。
package com.anbai.sec.cmd;
/**
* 本地命令执行类
* Creator: yz
* Date: 2019/12/6
*/
public class CommandExecution {
public static native String exec(String cmd);
}
javac -cp . CommandExecution.java -h
即可在当前目录生成.class 和.h文件。
JNI-基础数据类型
Java和JNI定义的类型是需要转换的,不能直接使用Java里的类型,也不能直接将JNI、C/C++的类型直接返回给Java。
参考如下类型对照表:
Java类型 | JNI类型 | C/C++类型 | 大小 |
---|---|---|---|
Boolean | Jblloean | unsigned char | 无符号8位 |
Byte | Jbyte | char | 有符号8位 |
Char | Jchar | unsigned short | 无符号16位 |
Short | Jshort | short | 有符号16位 |
Int | Jint | int | 有符号32位 |
Long | Jlong | long long | 有符号64位 |
Float | Jfloat | float | 32位 |
Double | Jdouble | double | 64位 |
jstring转char:env->GetStringUTFChars(str, &jsCopy)
char转jstring: env->NewStringUTF(“Hello…”)
字符串资源释放: env->ReleaseStringUTFChars(javaString, p);