首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

存取 JNI 函數:JNIEnv 參數架構與 Java 字串 Unicode 轉換實戰

     編輯:Java 相關知識

JNIEnv 參數作為 JVM 操作入口

每個 JNI 固有方法接收特殊第一參數:JNIEnv 參數——指向 JNIEnv_ 特殊 JNI 資料結構的指標。結構元素包含指向 JVM 生成陣列的指標,每個元素為 JNI 函數指標。固有方法內部透過解引用指標調用 JNI 函數。每種 JVM 自行實現 JNI 函數,但地址在預定義偏移處。JNIEnv 參數提供存取:版本資訊、類別/物件操作、全域/區域引用控制、實例/靜態欄位存取、實例/靜態方法調用、字串/陣列操作、異常產生與控制等函數類別。

C++ 風格語法簡化調用

jni.h 在 #ifdef _cplusplus 內將 JNIEnv_ 定義為類別,含大量內嵌函數。C 語法 (*jEnv)->ReleaseStringUTFChars(jEnv, jMsg, msg) 可簡化為 C++ 風格 jEnv->ReleaseStringUTFChars(jMsg, msg),無需雙重解引用與重複傳遞第一參數。後續範例採用 C++ 風格。

Java 字串 Unicode 轉換實例

Java 字串採 Unicode 格式。接收字串需傳給非 Unicode 函數(如 printf())時,必須用 GetStringUTFChars() 轉換為 ASCII 字元。該函數接收 Java 字串轉為 UTF-8(8 位容納 ASCII、16 位容納 Unicode;若原字串純 ASCII 則結果為 ASCII)。GetStringUTFChars 為 JNIEnv 間接指向結構的欄位,指向函數指標。用傳統 C 語法透過指標調用函數,此形式適用所有 JNI 函數存取。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved