1. 程式人生 > >JNI學習(3)(我是菜鳥)-jstring介紹

JNI學習(3)(我是菜鳥)-jstring介紹

所有內容為記錄學習過程,不是大牛敬請諒解。所有分析都參考深入理解Android 卷一

Java中的String 也是引用型別,不過由於它的使用頻率有點高,所以再JNI 規範中,單獨建立了一個 jstring 型別表示java中的String型別,雖然jstring 是一種獨立的資料型別,但是它並沒有提供成員函式以便操作,而C++中的string 類有自己的成員哈數,那麼操作jstring的過程,不用多說應該是儲存在那個JNIEnv中了。

以下介紹幾個jstring的函式

1,呼叫JNIEnvNewString(JNIEnv *env,const jchar *unicodeChars,jsize len),

可以從Native的字串中得到一個jstring物件,其實可以把這個jstring物件看成java中的String物件在JNI層的代表,也就是說jstring就是一個Java String。但是由於java String儲存的是Unicode字串,所以NewString函式的引數也必須是Unicode字串

呼叫JNIEnv NewStringUTF將根據Native的一個UTF-8字串得到一個jstring物件。

上面兩個函式將本地字元轉換成了javaString物件,JNIEnv還提供了GetStringChars加盟手機進而GetStromgUFTChars函式,他們可以將JavaString

物件轉換成本地字串,其中GetStringChars得到一個Unicode字串,GetStringUTFChars的到一個UTF-8字串。

如果呼叫了上面幾個函式,做完相關工作後,就需要呼叫ReleaseStringChars函式,或者ReleaseStringUTFChars 函式來對應的釋放資源,否則可能會導致JNI記憶體洩露。這個問題需要特別注意

來個示例