JNI系列文章:java
Java发展至今流行度和覆盖广度已经遍及各行各业,这依赖于它的跨平台,易于入门编写,强大的社区,带来的各类各样的框架,以及功能API库。然而仍是有它的局限性,好比Java的安全性(Java容易被反编译)、性能、内存管理(成也垃圾回收,败也垃圾回收),正式程序员没法直接的管控到内存,才容易致使内存泄漏GC没法回收。为了解决这些问题使用更加高效的c/c++,因而出现了JNI(Java Native Interface)Java本地接口,便于java语言和c/c++语言的通讯。c++
注意前方高能: 学习JNI必须有C/C++的基础,不然Native层的工程代码你会只知其一;不知其二,甚至一路懵逼,严重的易致使扔鼠标、砸电脑,而后就是入门到放弃。程序员
package com.jerry.jnitest;
public class JniTest {
public static void main(String[] args) {
}
}
复制代码
在类中写入native的方法(就是java调用C/C++的方法)windows
/** * 经过jni,获取c中返回的字符串 * @return 字符串 */
public native static String getStringFromC();
复制代码
完整代码以下:安全
package com.jerry.jnitest;
public class JniTest {
public static void main(String[] args) {
// 调用native方法,获取C中返回的字符串数据
String text = getStringFromC();
System.out.println(text);
}
static {
System.loadLibrary("JniStudy");
}
/** * 经过jni,获取c中返回的字符串 * @return 字符串 */
public native static String getStringFromC();
}
复制代码
生成C中使用的native方法头文件 (若是配置好了jdk的环境变量,正常状况下不会有问题),cmd终端下输入以下命令,当前终端目录必须在java工程的src路径下: 命令:javah com.jerry.jnitest.JniTest(native方法所在类的全名) 框架
建立C语言工程,拷贝头文件至工程目录 使用VS建立空的项目JniStudy,将头文件拷贝到JniStudy目录中 函数
在VS中建立一个01.c的源文件用来实现头文件中的native函数:post
#include "com_jerry_jnitest_JniTest.h"
JNIEXPORT jstring JNICALL Java_com_jerry_jnitest_JniTest_getStringFromC (JNIEnv *env, jclass jcls) {
char *str = "Hello Jerry welcome to Jni World!";
return (*env)->NewStringUTF(env, str);
}
复制代码
这个就是实现return一个C的字符串。这样native函数就实现了,接下来就是生成动态连接库供java来调用native方法。性能
JNI系列文章:学习