Android JNI中对String的处理

来源:互联网 发布:教学楼网络设计方案 编辑:程序博客网 时间:2024/05/13 08:57

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.


原创粉丝点击