1. 程式人生 > >jni的JNIEnv指標和jobject指標

jni的JNIEnv指標和jobject指標

  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 
  }