首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android JNI中对String的处置

2012-06-20 
Android JNI中对String的处理Java的String使用的16位的Unicode字符(UTF-16),在C/C中一般会用char*指向stri

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.


热点排行