JNI之函数介绍三之字符串操作

NDK  2023年7月24日 am8:08发布1年前 (2023)更新 城堡大人
102 0 0

前言

今天介绍一下JNI中字符串相关操作函数。

正文

NewString

jstring NewString(JNIEnv *env, const jchar *unicodeChars,jsize len);

利用 Unicode 字符数组构造新的 java.lang.String 对象。

unicodeChars为指向Unicode字符串的指针,len为Unicode字符串的长度。

如果成功,就返回字符串对象,否则返回NULL。

GetStringLength

jsize GetStringLength(JNIEnv *env, jstring string);

返回 Java 字符串的长度(Unicode 字符数)。

GetStringChars

const jchar * GetStringChars(JNIEnv *env, jstring string,jboolean *isCopy);

返回指向字符串的 Unicode 字符数组的指针。

该指针在调用ReleaseStringchars() 前一直有效。

如果 isCopy 非空, 则在复制完成后将 *isCopy 设为 JNI_TRUE。 如果没有复制,则设为 JNI_FALSE。

string是Java 字符串对象,isCopy是指向布尔值的指针。

如果成功,返回Unicode字符串的指针,否则返回NULL。

ReleaseStringChars

void ReleaseStringChars(JNIEnv *env, jstring string,const jchar *chars);

通知虚拟机平台相关代码无需再访问 chars。参数 chars 是一个指针,可通过GetStringChars() 从 string 获得。

string为java字符串对象,chars是指向Unicode字符串的指针。

NewStringUTF

jstring NewStringUTF(JNIEnv *env, const char *bytes);

利用 UTF-8 字符数组构造新 java.lang.String 对象。

bytes是指向 UTF-8 字符串的指针。

如果操作成功,返回Java字符串对象,否则返回NULL。

GetStringUTFLength

jsize GetStringUTFLength(JNIEnv *env, jstring string);

以字节为单位返回字符串string的 UTF-8 长度。

GetStringUTFChars

const char* GetStringUTFChars(JNIEnv *env, jstring string,jboolean *isCopy);

返回指向字符串的 UTF-8 字符数组的指针。

该数组在被ReleaseStringUTFChars() 释放前将一直有效。

如果 isCopy 不是 NULL, *isCopy 在复制完成后即被设为 JNI_TRUE。 如果未复制,则设为 JNI_FALSE。

这个跟GetStringChars()差不多,只不过一个是Unicode,一个UTF-8格式的字符串。

需要配套使用哈,不可搞混!

ReleaseStringUTFChars

void ReleaseStringUTFChars(JNIEnv *env, jstring string,const char *utf);

通知虚拟机平台相关代码无需再访问 utf。 utf 参数是一个指针,可利用GetStringUTFChars() 从 string 获得。

参考文章

  1. JNI完全手册]》

  2. NDK中jni.h头文件完整内容

 历史上的今天

  1. 2021: 余光中:你的眼睛真好看(0条评论)
  2. 2019: 蒙田:论友谊(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

冯骥才:青云楼主

青云楼主,海河边一小文人的号。嘛叫小文人?就是在人们嘴边绝对挂不上号,可提起他来差不多还都知道的那类文人。此君脸窄身簿,皮黄肉干,胳膊大腿又细又长,远瞧赛几根竹竿子上凉着的一张豆皮。但人不可貌相,海不可斗量。他能写能画,能刻图章,连托裱的事也行;可行家们说他——手糙了点儿。因故,天津卫的买卖没他写...

Android aidl简单使用

前言简单记录一下aidl的使用,方便自己查阅和复习。正文因为客户端和服务端都需要引入相同的aidl的定义,因此这里单独吧aidl文件作为一个lib库。Biu2Aidl库Biu2Aidl是lib库,存放客户端和服务端共同的aidl定义和Constant类。IBook.aidl/Biu2...

贾平凹:喝酒

我在城里工作后,父亲便没有来过,他从学校退休在家,一直照管着我的小女儿。从来我的作品没有给他寄过,姨前年来,问我是不是写过一个中篇,说父亲听别人说过,曾去县上几个书店、邮局跑了半天去买,但没有买到。我听了很伤感,以后写了东西,就寄他一份,他每每又寄还给我,上边用笔批了密密麻麻的字。给我的信上说,他很...

[摘]Typora破解和下载(仅供学习)

前言本文摘抄,方便自己查阅。正文隐藏内容!付费阅读后才能查看!¥2 ¥3多个隐藏块只需支付一次付费阅读参考文章《Typora(morkdown编辑器)的下载和破解》PS: 上面只是个人观点,也就偶尔使用此工具,如果是商用,请购买正版激活码吧,谢谢

[摘]AudioTrack简单简介之二

上回说到AudioTrack播放有两种模式,即MODE_STATIC和MODE_STREAM,至于区别,上回也说过,如下:MODE_STREAM在这种模式下,需要先play,然后通过write一次次把音频数据写到AudioTrack中(我在试验中可以先write再play,可能是数据太小了的原因...

sleep和wait的区别简介

前言记录一下sleep和wait的区别正文wait必须搭配synchronize一起使用,而sleep不需要;进入wait状态的线程能够被 notify 和 notifyAll 线程唤醒,而 sleep 状态的线程不能被 notify 方法唤醒;wait 通常有条件地执行,线程...