读书人

Android JNI中对String的处置

发布时间: 2012-06-20 20:37:21 作者: rapoo

Android JNI中对String的处理

Java的String使用的16位的Unicode字符(UTF-16),在C/C++中一般会用char*指向string(这意味着strings在其中往往会是ASCII或者UTF-8格式).因此在JNI中,java的String必须在被使用前转换成C/C++可以使用的格式。而在JNI中,被使用后的C/C++ String必须释放掉,否则会引起内存泄漏。

有一个简单的例子

在java代码中

public class testMine {

public staticnative void handleMyString(String str);

}

在jni的C代码中,

void JNICALLJava_com_test_testMine_handleMyString(JNIEnv * env, jclass cla, jstring js)

{

constchar* s = (*env)->GetStringUTFChars(env,js, NULL);

if(s != NULL) {

…………..// 做所要进行的处理.

// 释放string

(*env)->ReleaseStringUTFChars(env,js, s);

}

}

JNI有好一些对string进行 读取/释放 的方法,如下

GetStringChars(), ReleaseStringChars();GetStringUTFChars(),ReleaseStringUTFChars();GetStringCritical(), ReleaseStringCritical().

还有两个方法,在调用的时候并不分配内存,因此不需要释放,建议使用:GetStringRegion和GetStringUTFRegion.


读书人网 >Android

热点推荐