亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java本地接口工作方式初探

2019-11-17 05:52:36
字體:
來源:轉載
供稿:網友

java本地接口(Java Native Interface (JNI))允許運行在Java虛擬機(Java Virtual Machine (JVM))上的代碼調用本地程序和類庫,或者被它們調用,這些程序和類庫可以是其它語言編寫的,比如C、C++或者匯編語言。

當一個程序無法完全使用Java編寫時,開發者可以通過JNI來編寫本地方法,比如標準Java類庫并不支持的依賴于平臺的特色或者程序庫。JNI還可以用于修改現有的使用其它語言編寫的程序,使它們可以通過Java編寫的程序來訪問。

很多基本類庫都依賴JNI來為開發者和用戶提供服務,比如文件的輸入/輸出和音頻功能。在基本類庫中包含的對于性能和平臺敏感的API可以允許所有的Java程序以安全和平臺無關的方式來使用這些功能,在采用JNI之前,開發者需要明確這些功能并不是已經包含在Java標準類庫中的,在這篇文章中,我將會講解JNI是如何工作的以及本地類型是如何映射到Java的類型和類庫的。

JNI工作原理

在JNI中,本地函數是通過一個獨立的.c或.cpp文件來實現的(C++為JNI提供的界面會更簡潔一些)。當JVM調用該函數時,它傳遞了一個JNIEnv指針、一個jobject指針和通過Java方法定義的Java參數,JNI函數的形式如下:

JNIEXPORT void JNICALL Java_ClassName_MethodName

(JNIEnv *env, jobjectobj)

{

//Method native implemenation

}

env指針是一個包含了JVM接口的結構,它包含了與JVM進行交互以及與Java對象協同工作所必需的函數,示例中的JNI函數可以在本地數組和Java數組類型之間、本地字符串和Java字符串類型之間進行轉換,其功能還包括對象的實例化、拋出異常等?;旧夏梢允褂肑NIEnv來實現所有Java能做到的事情,雖然要簡單很多。

更加正式的解釋是這樣的,本地代碼通過調用JNI的函數來訪問JVM,這是通過一個界面指針實現的(界面指針實際上是指向指針的指針),該指針指向一個指針數組,數組中的每個指針都指向了一個界面函數,而每個界面函數都是在數組中預先定義過的。

本地方法將JNI界面指針當作一個參數,如果在同一個Java線程中,出現對該本地方法的多重調用,JVM則保證傳遞相同的界面指針到本地方法。不過,一個本地方法可以被不同的Java線程調用,因而也可能會收到不同的JNI界面指針。

本地方法是通過System.loadLibrary方法加載的,在以下的例子中,類的初始化方法加載了一個指定平臺的本地類庫,該類庫定義了本地方法:

packagepkg;

class Cls {

native double f(inti, String s);

static {

System.loadLibrary(pkg_Cls");

}

}

System.loadLibrary方法的參數是一個類庫的名稱,它可以由程序員任意選取,系統則遵循一個標準的本地化平臺的方式來轉換類庫的名稱到一個本地類庫的名稱。例如,在Solaris操作系統中會將pkg_Cls轉換為libpkg_Cls.so,而Win32系統則會將同樣的pkg_Cls轉換為pkg_Cls.dll。

動態指針會根據它們的名字來進行解析,一個本地方法的名稱是按照組件進行連接的,它包含了:前綴“Java_”、一個分離的合法的類名稱和一個分離的方法名稱。

注意:微軟的JVM有相同的機制從Java調用本地Windows代碼,該機制被稱為原始本地接口(Raw Native Interface (RNI))。

數據類型映射

 

基本類型,比如整型、字符等等,是在Java和本地代碼間進行拷貝的,而其他的自定義Java對象則是通過引用來傳遞的。

 

這個表格展示了Java和本地代碼之間的類型映射,這些類型是可以互換的,您可以在您使用int類型的位置使用jint類型,當然反過來也一樣,而且不需要任何類型轉化。但是,Java的字符串和數組類型和本地的字符串與數組類型之間的轉換就比較困難了,如果您使用的jstring類型中出現了字符“*”,您的代碼會造成JVM的崩潰,以下的例子說明了您應當如何正確使用字符串:

JNIEXPORT void JNICALL Java_ClassName_MethodName

(JNIEnv *env, jobjectobj, jstringjavaString)

{

//Get the native string from Java string

const char *nativeString = env->GetStringUTFChars(env,javaString, 0);

env->ReleaseStringUTFChars(env,javaString, nativeString);

}

您需要使用界面指針env來操作Java對象。

總結

在您的程序中使用JNI并不是一件容易的事情,然而,JNI的性能和使用原有代碼的能力將會為您的Java程序添加更多的功能并且能勝任更多的挑戰,如果需要關于JNI的更多信息,可以訪問JNI的主頁。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久伊人日本| 中文字幕亚洲情99在线| 精品少妇一区二区30p| 91欧美精品午夜性色福利在线| 日韩av电影手机在线观看| 欧美日韩国产色视频| 欧美日韩在线观看视频| 色中色综合影院手机版在线观看| 欧美精品少妇videofree| 91精品国产自产在线| 欧美性xxxxx极品| 久久精品视频播放| 久久人人爽人人爽人人片av高清| 欧美视频免费在线观看| 欧美黑人一级爽快片淫片高清| 久久久久99精品久久久久| 国产视频亚洲视频| 麻豆精品精华液| 97在线看免费观看视频在线观看| 少妇av一区二区三区| 国产脚交av在线一区二区| 亚洲欧洲xxxx| 久久97精品久久久久久久不卡| 成人福利视频网| 青青a在线精品免费观看| 亚洲人成毛片在线播放| 日韩免费电影在线观看| 国产精品白丝av嫩草影院| 欧美日韩国产成人高清视频| 日韩欧美亚洲国产一区| 国产精品96久久久久久| 538国产精品一区二区在线| 国产精品久久久久久久久久免费| 国产精品亚洲美女av网站| 亚洲少妇激情视频| 57pao国产成人免费| 大量国产精品视频| 亚洲影院色无极综合| 久久天堂av综合合色| 成人激情视频小说免费下载| 国产69精品久久久久9| 日韩高清av一区二区三区| 538国产精品一区二区在线| 久久久久久网站| 久久久av电影| 日本精品一区二区三区在线播放视频| 亚洲欧美成人一区二区在线电影| 欧美资源在线观看| 欧美一级电影免费在线观看| 中文字幕久久精品| 久久久久久18| 亚洲精品资源美女情侣酒店| 国产精品久久久久久久久久新婚| xxx欧美精品| 91美女片黄在线观| 欧美性资源免费| 国模精品视频一区二区| 日韩有码在线视频| 成人国产精品色哟哟| 夜色77av精品影院| 97av视频在线| 亚洲女成人图区| 国产精品久久久久久久久久99| 欧美激情精品在线| 亚洲国产日韩精品在线| 国产精品丝袜久久久久久高清| 国产精品亚洲欧美导航| 欧美黑人xxxⅹ高潮交| 日韩精品日韩在线观看| 国产主播在线一区| 亚洲最大福利视频网| 国产日韩在线看| 成人免费观看网址| 国产精品大陆在线观看| 国产999精品视频| 日韩电影在线观看免费| 欧美高清视频在线播放| 国产精品亚洲第一区| 中文字幕最新精品| 中文字幕综合一区| 亚洲跨种族黑人xxx| 欧美最顶级的aⅴ艳星| 日韩美女福利视频| 日韩电视剧在线观看免费网站| 国产精品久久久久久网站| 91精品久久久久久久久久另类| 国产精品国产亚洲伊人久久| 中文字幕日韩有码| 国产日韩欧美电影在线观看| 久久久精品视频在线观看| 亚洲人成电影网站色www| 久久影院模特热| 国产精品久久久久7777婷婷| 神马国产精品影院av| 精品国偷自产在线| 欧美与黑人午夜性猛交久久久| 91av在线看| 欧美成人自拍视频| 久久久国产精品亚洲一区| 欧美日韩在线另类| 国产精品入口福利| 日韩成人av在线| 中文字幕久热精品在线视频| 欧美疯狂性受xxxxx另类| 91丨九色丨国产在线| 亚洲图片在区色| 欧美性猛交xxxx免费看| 日韩美女免费线视频| 日韩av电影在线网| 精品国偷自产在线| 国产午夜精品全部视频在线播放| 久久久久久久久久婷婷| 97久久精品视频| 中文字幕最新精品| 国产97免费视| 丝袜一区二区三区| 中文字幕精品av| 国产精品电影网站| 精品久久久久久电影| 精品久久久香蕉免费精品视频| 亚洲人成网站777色婷婷| 日韩国产精品视频| 日韩在线观看电影| 精品毛片网大全| 不卡在线观看电视剧完整版| 欧美重口另类videos人妖| 日韩av免费看网站| 亚洲欧洲免费视频| 日韩在线观看免费网站| 国产成人jvid在线播放| 国产精品第一第二| 国产精欧美一区二区三区| 国产精品久久久久久久久久ktv| 亚洲国产精品人久久电影| 91九色视频在线| 欧美黑人极品猛少妇色xxxxx| 久久人人97超碰精品888| 亚洲欧美日韩天堂一区二区| 亚洲a成v人在线观看| 九九久久久久99精品| 性色av一区二区三区| 亚洲成人av中文字幕| 欧美日韩亚洲网| 一区二区av在线| 国产女同一区二区| 欧美视频不卡中文| 一区二区三区回区在观看免费视频| 日韩视频在线观看免费| 日韩国产高清污视频在线观看| 日韩美女视频免费在线观看| 亚洲老头同性xxxxx| 国产精品人成电影在线观看| 日韩一区二区久久久| 欧美在线视频免费| 国产一区二区三区精品久久久| 国产精品久久久久久久久久99| 亚洲精品一区二区在线| 欧美大片免费观看在线观看网站推荐| 麻豆精品精华液| 精品亚洲国产成av人片传媒| 国产精品久久久91| 日韩中文理论片| 国产999在线观看| 欧美一级在线亚洲天堂|