2.1 JNI概述
最后更新于:2022-04-02 05:47:59
JNI,是Java Native Interface的缩写,中文为Java本地调用。通俗地说,JNI是一种技术,通过这种技术可以做到以下两点:
- Java程序中的函数可以调用Native语言写的函数,Native一般指的是C/C++编写的函数。
- Native程序中的函数可以调用Java层的函数,也就是在C/C++程序中可以调用Java的函数。
在平台无关的Java中,为什么要创建一个和Native相关的JNI技术呢?这岂不是破坏了Java的平台无关特性吗?本人觉得,JNI技术的推出可能是出于以下几个方面的考虑:
- 承载Java世界的虚拟机是用Native语言写的,而虚拟机又运行在具体平台上,所以虚拟机本身无法做到平台无关。然而,有了JNI技术,就可以对Java层屏蔽具体的虚拟机实现上的差异了。这样,就能实现Java本身的平台无关特性。其实Java一直在使用JNI技术,只是我们平时较少用到罢了。
- 早在Java语言诞生前,很多程序都是用Native语言写的,它们遍布在软件世界的各个角落。Java出世后,它受到了追捧,并迅速得到发展,但仍无法对软件世界彻底改朝换代,于是才有了折中的办法。既然已经有Native模块实现了相关功能,那么在Java中通过JNI技术直接使用它们就行了,免得落下重复制造轮子的坏名声。另外,在一些要求效率和速度的场合还是需要Native语言参与的。
在Android平台上,JNI就是一座将Native世界和Java世界间的天堑变成通途的桥,来看图2-1,它展示了Android平台上JNI所处的位置:
:-: ![](http://img.blog.csdn.net/20150802093646109?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图2-1 Android平台中JNI示意图
由上图可知,JNI将Java世界和Native世界紧密地联系在一起了。在Android平台上尽情使用Java开发的程序员们不要忘了,如果没有JNI的支持,我们将寸步难行!
* * * * *
**注意,**虽然JNI层的代码是用Native语言写的,但本书还是把和JNI相关的模块单独归类到JNI层。
* * * * *
俗话说,百闻不如一见,就来见识一下JNI技术吧。
';