什么是JNI?干啥的?

335 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情

JAVA的JNI

  • 什么是JNI?JNI就是JAVA中的native作用一样的。主要用来衔接不同语言之间的调用。为了能够打破JAVA语言平台的限制,JNI技术应运而生。有了JNI我们就可以理论上将所有的语言整合到JAVA中。如果JNI仅仅因为他能整合其他语言这一个特点就要用它显得有点鸡肋。除此之外它还能够提高我们程序的构建效率、提高其他程序执行效率、整合其他语言作为JAVA一个部分。

  • 用了它我们也能够很方便的升级语言的版本。如果你对程序还有 热情那么希望呢能够认真的学习下JNI, 这个技术能够让我们的程序变得多样多彩。

package com.li.test;

public class JNIDemo {
    
    //定义一个方法,该方法在C中实现
    public native void testHello();
    
    public static void main(String[] args){
        //加载C文件
        System.loadLibrary("TestJNI");
        JNIDemo jniDemo = new JNIDemo();
        jniDemo.testHello();
    }

}
  • 此时我们只需要将JNI文件防止在全局位置,这样就可以加载到了。为了能够区分是JAVA的方法还是第三方的方法所以jAVA为了我们提供了native 关键字,通过这个关键字我们就能够区分了。

如何执行

  • 上述代码其实很简单,往往越简单越容易出错,上面main方法中第一行回进行加载JNI 。 这里执行JNI名称根据系统不同,后缀分别是 dll 或者so , 前者是windows 后者是Linux。加载后JNIDemo将拥有test H e l lo这个方法。那为什么我们还需要创建方法签名呢?其实这个很好理解,你必须要调用者清除这个方法的意图,入参出参知道了才能够很好的运营该方法。而实际执行则是真正提供的JNI方法。

  • 有了定义后面就可以很方便的进行调用了。

总结

  • JNI 可以理解和du bbo一样的功能,都是为了接偶,但是彼此之间还能存在一定关联,方便互相存在调用链