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.


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值