1.JNI技术框架
首先,Java代码是运行在JVM上的class集合,是通过JVM解释执行,这也是Java能够跨平台的根本原因;其次,在某些与硬件或者操作系统平台相关的Java软件中,需要在Java代码中调用使用C、C++等编写的本地应用或者库文件;最后,JNI(Java Native Interface)是一个能使Java代码调用或被这些本地应用调用的程序框架。
JNI技术的目的是为了实现Java语言与其他编程语言(汇编、C、C++等)的交互。那么在什么时候需要用到这项技术呢?(1)软件不能完全采用Java语言编程时,例如对Java标准类文件不能直接操作的与平台、硬件等编程时;(2)软件对时间或者性能要求较高时,需要用到底层语言实现对对象的驱动(本地代码要比JVM的执行效率更高);(3)用其他编程语言已经实现了功能,在Java代码中直接调用已经生产的库文件(如动态链接库)。
JNI技术的实现原理如图1所示。首先通过在Java代码加载库文件,调用库文件实现的根方法(stubmethod);然后通过JNI加载动态库文件(Windows下为.dll文件,Linux下为.so文件),调用本地方法(nativemethod);最后在本地文件中实现功能,返回处理值。
图1 JNI调用原理
在Java中实现JNI一般有如下几个步骤:
(1)在Java代码中使用System