现在的位置: 首页 > 综合 > 正文

java jni简介

2018年09月17日 ⁄ 综合 ⁄ 共 970字 ⁄ 字号 评论关闭

一、JNI介绍
    Java 本机接口(Java Native Interface (JNI))是一个本机编程接口,它是 Java 软件开发工具箱(Java SoftwareDevelopment Kit (SDK))的一部分,
JNI它提供了若干的API,实现了和Java和其他语言的通信(主要是C&C++)。

    JNI允许Java代码使用以其它语言(譬如 C 和 C++)编写的代码和代码库。

    Invocation API(JNI的一部分)可以用来将Java虚拟机(JVM)嵌入到本机应用程序中,从而允许程序员从本机代码内部调用Java 代码。

    也许不少人觉得Java已经足够强大,为什么要需要JNI这种东西呢?

    我们知道Java是一种平台无关性的语言,平台对于上层的java代码来说是透明的,所以在多数时间我们是不需要JNI的,但是假如你遇到了如下的三种情况之一呢? 

   1. 你的Java代码,需要得到一个文件的属性。但是你找遍了JDK帮助文档也找不到相关的API。 

   2. 在本地还有一个别的系统,不过他不是Java语言实现的,这个时候你的老板要求你把两套系统整合到一起。 

   3. 你的Java代码中需要用到某种算法,不过算法是用C实现并封装在动态链接库文件(DLL)当中的。 

对于上述的三种情况,如果没有JNI的话,那就会变得异常棘手了。就算找到解决方案了,也是费时费力。其实说到底还是会增加开发和维护的成本。 

二、环境需求

JNI 最常见的两个应用:从Java程序调用C/C++,以及从C/C++程序调用Java代码

1、需要下列工具与组件:
    javac.exe:  Java 编译器:随 SDK(Java 2 SDK及以上) 一起提供的 。

    java.exe:   Java 虚拟机(JVM):随 SDK 一起提供的 。

    javah.exe:  本机方法 C 文件生成器:随 SDK 一起提供的 。

2、定义JNI的库文件和本机头文件:
    jni.h (C 头文件)、jvm.lib 和 jvm.dll (window下)或 libjvm.so 文件(linux下),这些文件都是随 SDK 一起提供的。

3、能够创建共享库的 C 和 C++ 编译器。

最常见的两个 C 编译器是用于Windows的Visual C++和用于基于UNIX系统的 gcc/cc。

因此,后面我们将会介绍在两种环境下的JNI编程例子。

抱歉!评论已关闭.