JNI学习(3)(我是菜鸟)-jstring介绍

本文详细介绍了JNI中jstring类型的使用,包括如何从Native字符串创建jstring对象,如NewString和NewStringUTF函数。同时强调了转换回本地字符串的GetStringChars和GetStringUTFChars函数,以及释放资源的ReleaseStringChars和ReleaseStringUTFChars方法,以防止JNI内存泄露。内容主要参考《深入理解Android 卷一》。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

所有内容为记录学习过程,不是大牛敬请谅解。所有分析都参考深入理解Android 卷一

Java中的String 也是引用类型,不过由于它的使用频率有点高,所以再JNI 规范中,单独创建了一个 jstring 类型表示java中的String类型,虽然jstring 是一种独立的数据类型,但是它并没有提供成员函数以便操作,而C++中的string 类有自己的成员哈数,那么操作jstring的过程,不用多说应该是保存在那个JNIEnv中了。

以下介绍几个jstring的函数

1,调用JNIEnvNewString(JNIEnv *env,const jchar *unicodeChars,jsize len),可以从Native的字符串中得到一个jstring对象,其实可以把这个jstring对象看成java中的String对象在JNI层的代表,也就是说jstring就是一个Java String。但是由于java String存储的是Unicode字符串,所以NewString函数的参数也必须是Unicode字符串

调用JNIEnv NewStringUTF将根据Native的一个UTF-8字符串得到一个jstring对象。

上面两个函数将本地字符转换成了javaString对象,JNIEnv还提供了GetStringChars加盟手机进而GetStromgUFTChars函数,他们可以将JavaString对象转换成本地字符串,其中GetStringChars得到一个Unicode字符串,GetStringUTFChars的到一个UTF-8字符串。

如果调用了上面几个函数,做完相关工作后,就需要调用ReleaseStringChars函数,或者ReleaseStringUTFChars 函数来对应的释放资源,否则可能会导致JNI内存泄露。这个问题需要特别注意


来个示例


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值