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);
