程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JNI技術詳解

JNI技術詳解

編輯:關於JAVA

前段時間探究了點關於JNI技術方面的東西,在網上找,發現關於這方面的東西很少

基本上也是找不到,所以就決定寫下來,做個筆記:

JNI:

JNI是Java Native Interface的縮寫,中文為JAVA本地調用。從Java1.1開始,Java Native Interface(JNI)標准成為java平台的一部分,它允許Java代碼和其他語言寫的代碼進行交互。JNI一開始是為了本地已編譯語言,尤其是C和C++而設計的,

但是它並不妨礙你使用其他語言,只要調用約定受支持就可以了。

我們知道Java是一種平台無關性的語言,平台對於上層的java代碼來說是透明的,所以在多數時間我們是不需要JNI的

但在下面這幾種情況下你可能會用到JNI技術:

1.你的Java代碼,需要得到一個文件的屬性。但是你找遍了JDK幫助文檔也找不到相關的API。

2.在本地還有一個別的系統,不過他不是Java語言實現的,這個時候你的老板要求你把兩套系統整合到一起。

3.你的Java代碼中需要用到某種算法,不過算法是用C實現並封裝在動態鏈接庫文件(DLL)當中的。

對於上述的三種情況,如果沒有JNI的話,那就會變得異常棘手了。就算找到解決方案了,也是費時費力。其實說到底還是會增加開發和維護的成本。

對於JNI來說:其具體步驟如下:

1.先對Java文件對應編譯  javac filename.java

filename.java文件內容eg.

class HelloWorld     
{     
    private native void print();     
    static  
    {     
        System.loadLibrary("HelloWorld");     
    }     
    public static void main(String[] args)     
    {     
        new HelloWorld().print();     
    }     
}

2.生成對應的.h文件 javah -jni filename此命令執行完後在目錄中會生成HelloWorld.h文件,該文件中國包含了一個函數java_HelloWorld_print的聲明。

3.將對應的.c或.cpp文件制作成動態庫

cc -I/usr/lib/jvm/java-6-sun/include/linux  -I/usr/lib/jvm/java-6-sun/include -fPIC -shared -o libHelloWorld.so HelloWorld.c

4.執行

java -Djava.library.path='.' HelloWorld

本文出自 “驿落黃昏” 博客,請務必保留此出處http://yiluohuanghun.blog.51cto.com/3407300/860269

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved