实际开发中,可能不全都是从Java到本地类库的调用,往往可能还涉及本地代码的回调,这个时候,JNA的回调功能就派上用场了。
本篇中的JNA回调实例,是在上一篇《初识JNA》的基础上写的,下面涉及到的代码均在之前的例子中添加。
JNA(Java Native Access)对JNI进行了包装,提供了一组工具类用于访问本地程序,不需要编写任何Native或JNI代码。只需要在Java接口文件中定义与本地类库中的方法结构一样的native类型的方法即可,不需要实现,JNA会自动联系Java中的接口与本地类库中的方法。
原则上来说在有本地类库时,并不需要再写本地代码,而是直接写Java代码即可,但这样做的前提是要有一个编写良好又明确标明方法的类库。如果碰到任务需要在原来本地类库的基础上进行二次包装,就不得不继续编写本地代码了,而我写的这个例子就是按照这样的步骤来的。
众所周知,Java是一门跨平台语言,用Java可以完成很多工作。但Java也不是万能的,有时我们可能会需要调用很多本地应用或库,有可能会需要其他程序来调用Java。这就涉及到一个Java与其他语言程序的交互问题。对于本地程序,我们一般都会用C或C++或汇编语言等来编写,然后再编译为基于本地系统和硬件的程序,所以需要有一种让JVM中的程序调用本地程序的技术,这个时候JNI就出现了。当然也会有其他方式来实现本机应用和Java程序间的通讯,但某些情况下确实会用到JNI的方式来实现Java和本地程序的互相调用。
JNI (Java Native Interface)是一个标准的编程接口,定义了一种方式来实现JVM中的Java代码和本地代码间的交互。