亚欧洲精品在线观看,窝窝影院午夜看片,久久国产成人午夜av影院宅,午夜91,免费国产人成网站,ts在线视频,欧美激情在线一区

java語(yǔ)言

JAVA JNI函數(shù)的注冊(cè)過(guò)程介紹

時(shí)間:2025-06-04 17:54:22 java語(yǔ)言 我要投稿
  • 相關(guān)推薦

JAVA JNI函數(shù)的注冊(cè)過(guò)程介紹

  我們?cè)趈ava中調(diào)用Native code的時(shí)候,一般是通過(guò)JNI來(lái)實(shí)現(xiàn)的,我們只需要在java類(lèi)中加載本地.so庫(kù)文件,并聲明native方法,然后在需要調(diào)用的地方調(diào)用即可,至于java中native方法的具體實(shí)現(xiàn),全部交給了Native層。我們要在java中正確地調(diào)用到本地代碼中對(duì)應(yīng)函數(shù)的前提是什么呢?答案就是通過(guò)一定的機(jī)制建立java中native方法和本地代碼中函數(shù)的一一對(duì)應(yīng)關(guān)系,那么這種機(jī)制是什么呢?就是JNI函數(shù)的注冊(cè)機(jī)制。

  JNI函數(shù)的注冊(cè)有兩種方式,一種是靜態(tài)注冊(cè)方式,另一種是動(dòng)態(tài)注冊(cè)方式。下面我們來(lái)分別介紹這兩實(shí)現(xiàn)方式。

  一.靜態(tài)注冊(cè)。

  1.實(shí)現(xiàn)原理:根據(jù)函數(shù)名來(lái)建立java方法和JNI函數(shù)間的一一對(duì)應(yīng)關(guān)系。

  2.實(shí)現(xiàn)過(guò)程:

 、倬帉(xiě)java代碼;

 、诰幾gjava代碼,生成.class文件;

  ③用過(guò)javah指令,利用生成的.class文件生成JNI的.h文件;

 、苌珊蟮腏NI頭文件中包含了Java函數(shù)在JNI層的聲明;

  3.弊端:

 、贂(shū)寫(xiě)很不方便,因?yàn)镴NI層函數(shù)的名字必須遵循特定的格式,且名字特別長(zhǎng);

 、跁(huì)導(dǎo)致程序員的工作量很大,因?yàn)楸仨殲樗新暶髁薾ative函數(shù)的java類(lèi)編寫(xiě)JNI頭文件;

 、鄢绦蜻\(yùn)行效率低,因?yàn)槌醮握{(diào)用native函數(shù)時(shí)需要根據(jù)根據(jù)函數(shù)名在JNI層中搜索對(duì)應(yīng)的本地函數(shù),然后建立對(duì)應(yīng)關(guān)系,這個(gè)過(guò)程比較耗時(shí)。

  二.動(dòng)態(tài)注冊(cè)。

  1.實(shí)現(xiàn)原理:直接告訴native函數(shù)其在JNI中對(duì)應(yīng)函數(shù)的指針;

  2.實(shí)現(xiàn)過(guò)程:

 、倮媒Y(jié)構(gòu)體JNINativeMethod保存Java Native函數(shù)和JNI函數(shù)的對(duì)應(yīng)關(guān)系;

 、谠谝粋(gè)JNINativeMethod數(shù)組中保存所有native函數(shù)和JNI函數(shù)的對(duì)應(yīng)關(guān)系;

  ③在Java中通過(guò)System.loadLibrary加載完JNI動(dòng)態(tài)庫(kù)之后,調(diào)用JNI_OnLoad函數(shù),開(kāi)始動(dòng)態(tài)注冊(cè);

 、躂NI_OnLoad中會(huì)調(diào)用AndroidRuntime::registerNativeMethods函數(shù)進(jìn)行函數(shù)注冊(cè);

 、軦ndroidRuntime::registerNativeMethods中最終調(diào)用jniRegisterNativeMethods完成注冊(cè)。

  3.優(yōu)點(diǎn):克服了靜態(tài)注冊(cè)的弊端。

【JAVA JNI函數(shù)的注冊(cè)過(guò)程介紹】相關(guān)文章:

Java中Jni調(diào)用DLL文件試驗(yàn)07-22

JNI是怎樣java調(diào)用c動(dòng)態(tài)庫(kù)07-09

JAVA中的main函數(shù)10-04

java構(gòu)造函數(shù)調(diào)用技巧10-26

java調(diào)用c函數(shù)的實(shí)例09-16

java函數(shù)及運(yùn)算符09-07

java回調(diào)函數(shù)詳解11-02

java函數(shù)使用方法07-18

Java面向過(guò)程教程10-05