引用类型被对于本地代码的引用是模糊的而不是本地数据类型,和并不能被使用和修改。JNI提供了一套API来这些引用类型的沟通。这些API被提供者本地功能通过JNIEnv的接口指针。在这部分,你讲简明浏览这些APIs部分对于接下来类型和组件:
String操作
由Java的String有JNI作为引用类型处理。这些引用不能作为本地C的String类型来直接使用。JNI提供者必要的功能来转化Java String引用到c字符串类型。尽管Java string对象是不变,JNI并不提供任何功能来修改一个存在Java string的内容。
JNI支持Unicode和UTF-8编码的字符串,和它提供两套函数通过JNIEnv接口指针来处理这些字符串编码的处理。
新建字符串
对于Unicode编码的字符串通过使用NewString函数和UTF-8字符通过使用NewStringUTF来构造新的字符串实例。
jstring javaString;
javaString = (*env)->NewStringUTF(env, "Hello World!");
转化一个Java String到C String
在本地为了使用一个Java string需要把它转化为C String类型,对于UNIcode的字符串使用getstringchars和对于utf-8的字符串使用getstringutfchars。
const jbyte* str;
jboolean isCopy;
str = (*env)->GetStringUTFChars(env, javaString, &isCopy);
if (0 != str) {
printf("Java string: %s", str);
if (JNI_TRUE == isCopy) {
printf("C string is a copy of the Java string.");
} else {
printf("C string points to actual string.");
}
对于获得字符串需要提供相应的ReleaseStringChars和ReleaseStringUTFChars来释放C string。