java jni簡介

來源:互聯網
上載者:User

一、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編程例子。




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.