小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

java 本地接口(java native interface)

 jinzq 2007-01-04

Java本地接口(JNI)是為java編寫(xiě)本地方法和jvm嵌入本地應(yīng)用程序的標(biāo)準(zhǔn)的應(yīng)用程序接口。首要的目標(biāo)是在給定的平臺(tái)上通過(guò)所有的jvm來(lái)實(shí)現(xiàn)兼容的二進(jìn)制編碼本地方法庫(kù)。

    當(dāng)使用經(jīng)典的虛擬機(jī)時(shí),Java2 SDK支持早期的本地方法接口(Native Method Interface)。 NMI是最初在JDK1.0實(shí)現(xiàn)的,NMI并不是java平臺(tái)標(biāo)準(zhǔn)的一部分。

 

Java Native Interface Tutorial http://java./docs/books/tutorial/native1.1/index.html

這個(gè)指南告訴你怎么把本地方法集成到你的java程序里面,你將會(huì)學(xué)會(huì)怎樣寫(xiě)本地方法,本地方法是一種使用其他語(yǔ)言來(lái)實(shí)現(xiàn)的方法,比如C.

JNI 概述

JNI是一個(gè)本地編程接口,使用JNI務(wù)必保證你的代碼能夠在所有的平臺(tái)在完全兼容。當(dāng)某些應(yīng)用程序不能完全通過(guò)java實(shí)現(xiàn)的情況下,程序員就可以使用JNI來(lái)寫(xiě)本地接口方法來(lái)處理這些情況,例如,你可能需要使用這些本地方法和JNI在下面的情況:

·在你的應(yīng)用程序里面,java類庫(kù)可能不能支持獨(dú)立平臺(tái)的一些特征

·你可能有一些其他語(yǔ)言寫(xiě)好的鏈接庫(kù),并且你希望通過(guò)java應(yīng)用程序來(lái)訪問(wèn)這些鏈接庫(kù)

·你可能想要通過(guò)低級(jí)語(yǔ)言來(lái)實(shí)現(xiàn)一部分效率要求很高的代碼,比如匯編,然后通過(guò)java應(yīng)用程序來(lái)調(diào)用它。

一 個(gè)本地方法可以創(chuàng)建java對(duì)象,包括數(shù)組和字符串,然后檢查和使用這些對(duì)象來(lái)執(zhí)行某些任務(wù)。一個(gè)本地方法也可以更新由它創(chuàng)建或被傳進(jìn)來(lái)的java對(duì)象, 并且這些被更新的對(duì)象對(duì)于java程序來(lái)說(shuō)同樣有效。因此,無(wú)論是本地語(yǔ)言部分還是java語(yǔ)言部分都可以創(chuàng)建、更新和訪問(wèn)java對(duì)象,并且在他們之間 共享這些變量。

JNI允許你在本地方法中使用java語(yǔ)言。具體的說(shuō),你可以在本地方法中catch and throw 異常,并且把異常處理交給java應(yīng)用程序來(lái)處理。本地方法同時(shí)也可以獲取java類信息。通過(guò)調(diào)用JNI函數(shù),本地方法可以加載java類和獲取類信 息。最后,本地方法能使用JNI來(lái)執(zhí)行時(shí)時(shí)的類型檢查。

 下圖解釋了傳統(tǒng)的C語(yǔ)言如何使用JNI連接java庫(kù),并調(diào)用java方法,使用java類等

 

下圖是java應(yīng)用程序調(diào)用本地方法,顯示了許多java程序利用JNI的可能性,包括調(diào)用C方法,C++類,調(diào)用匯編例程等等

很容易看到,JNI像膠水一樣把java應(yīng)用程序和本地應(yīng)用程序粘在了一起

 待續(xù) 。。。

關(guān)于jni的測(cè)試

環(huán)境 jdk1.4.2_08;  vc6.0;  winxp sp1

1.編寫(xiě)java程序

//Filename:JNITest.java

public class JNITest{

    public native void sayHello();
    public native int getInt();
    public native void setInt(int i);

    static{
        System.loadLibrary("testdll");
    }

    public static void main(String[] args){
        JNITest test = new JNITest();
        test.sayHello();
        System.out.println(test.getInt());
        test.setInt(100);
        System.out.println(test.getInt());
    }
}

2.編譯java程序

javac JNITest.java

3.生成.h文件

javah JNITest

4.用生成的.h文件編寫(xiě)連接庫(kù)(本例使用vc6.0)

JNITest.cpp如下

#include "JNITest.h"


int i = 0;

/*
 * Class:     JNITest
 * Method:    sayHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_JNITest_sayHello
(JNIEnv *, jobject){

 printf("Hello,world!\n");
}

/*
 * Class:     JNITest
 * Method:    getInt
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_JNITest_getInt
(JNIEnv *env, jobject o){
 return i;
}

/*
 * Class:     JNITest
 * Method:    setInt
 * Signature: (I)V
 */
JNIEXPORT void JNICALL Java_JNITest_setInt
(JNIEnv *env, jobject o, jint ji){

 i = ji;
}

5.把編譯好的testdll文件copy到class目錄下

6.運(yùn)行java程序

java JNITest

輸入結(jié)果

Hello,world!
0
100



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=400170

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多