为什么有个native呢?这是我所要学习的地方。所以下面想要总结下native。
认识native
JNI
Java平台有个用户和本地C代码进行互操作的API,称为Java Native Interface (Java本地接口)。 允许Java代码和其他语言(尤其C/C++)写的代码进行交互,只要遵守调用约定即可。
JNI调用过程
注意写程序时自下而上,调用时自上而下。
JNA
JNA(Java Native Access)框架是一个开源的Java框架,是SUN公司主导开发的,建立在经典的JNI的基础之上的一个框架。JNA框架就是为了解决这些问题和繁琐的事情而开发的,它提供一组Java工具类用于在运行期动态访问系统本地共享类库而不需要编写任何Native/JNI代码。开发人员只要在一个java接口中描述目标native library的函数与结构,JNA将自动实现Java接口到native function的映射,大大降低了Java调用本体共享库的开发难度。最重要的是我们不需要重写我们的动态链接库文件,而是有直接调用的API,大大简化了我们的工作量。JNA只需要我们写Java代码而不用写JNI或本地代码。
JNA的调用过程
JNA原理
JNA包括一个已与许多本地函数映射的平台库,以及一组简化本地访问的公用接口。JNA是建立在JNI技术基础之上的一个Java类库,它使您可以方便地使用Java直接访问动态链接库中地函数。原来使用JNI,你必须手工用C写一个动态链接库,在C语言中映射Java的数据类型。
JNA中,它提供一个动态的C语言编写的转发器,可以自动实现Java和C的数据类型映射,你不再需要编写C动态链接库。使用JNA技术比使用JNI技术调用动态链接库会有微的性能损失。但总体影响不大,因为JNA也避免了JNI的一些平台配置的开销。
Java调用C写的方法
1.创建java项目 编写HelloNative类
如果大家直接运行这个代码, JVM会告之:“A Java Exception has occurred.”控制台输出如下:
2.获取包含sayHello方法的头文件
(1)cmd进入到项目工程文件的放Java的文件目录下
(2)javac HelloNative.java生成一个文件HelloNative.class
(3)生成头文件
javah -jni HelloNative