NDK开发之字符串操作
2015-09-04 15:13
260 查看
在JNI中,Java字符串被当作一个引用来处理。这些引用类型并不像原生C字符串一样可以直接使用,JNI提供了Java字符串与C字符串之间转换的必要函数,因为Java字符串对象是不可变的(如果对这里有异议,请复习Java SE),因此JNI不提供任何修改现有的Java字符串内容的函数。
JNI支持两种编码格式的字符串,分别是Unicode和UTF-8。
好了,废话说完了,下面按部就班来。
一、创建字符串
我们可以在原生的C或者C++代码中使用NewString函数来构建Unicode编码格式的字符串,也可以使用NewStringUTF函数来构建UTF-8格式的字符串,如下,用一个给定的C字符串构建一个Java字符串。
二、把Java字符串转换成C字符串
为了在原生代码中使用Java字符串,需要先将Java字符串转换成C字符串,使用GetStringChars函数可以将Unicode格式的Java字符串转换成C字符串,使用GetStringUTFChars函数可以将UTF-8格式的Java字符串转换成C字符串。这两个函数的第三个参数均为可选参数,该可选参数是isCopy,它让调用者确定返回的C字符串地址是指向副本还是指向堆中的固定对象。
三、释放字符串
通过GetStringChars函数和GetStringUTFChars函数获得的C字符串在原生代码中使用完成后要正确的释放,否则会造成内存泄漏。和上面一样,释放函数也是有两个。ReleaseStringUTFChars和ReleaseStringChars,分别释放UTF-8格式和Unicode格式的字符串。
该函数有三个参数,第一个上篇博客已说过,不多说,第二个和第三个分别表示Java字符串和C字符串
本工程源码下载
JNI支持两种编码格式的字符串,分别是Unicode和UTF-8。
好了,废话说完了,下面按部就班来。
一、创建字符串
我们可以在原生的C或者C++代码中使用NewString函数来构建Unicode编码格式的字符串,也可以使用NewStringUTF函数来构建UTF-8格式的字符串,如下,用一个给定的C字符串构建一个Java字符串。
jstring Java_com_example_jni_MainActivity_stringTest1(JNIEnv* env, jobject thiz) { //创建字符串,用给定的C字符串创建Java字符串 jstring javaString; javaString = (*env)->NewStringUTF(env, "hello world!,hello lenve"); }
二、把Java字符串转换成C字符串
为了在原生代码中使用Java字符串,需要先将Java字符串转换成C字符串,使用GetStringChars函数可以将Unicode格式的Java字符串转换成C字符串,使用GetStringUTFChars函数可以将UTF-8格式的Java字符串转换成C字符串。这两个函数的第三个参数均为可选参数,该可选参数是isCopy,它让调用者确定返回的C字符串地址是指向副本还是指向堆中的固定对象。
jstring Java_com_example_jni_MainActivity_stringTest2(JNIEnv* env, jobject thiz, jstring javaString) { //把Java字符串转换为C字符串 const jbyte* str; jboolean isCopy; jstring javaStr; str = (*env)->GetStringUTFChars(env,javaString,&isCopy); if(0!=str){ printf("java String is :%s",str); if(JNI_TRUE==isCopy){ printf("C string is a copy of the java String."); javaStr = (*env)->NewStringUTF(env,"C string is a copy of the java String."); }else{ printf("C string points to actual String."); javaStr = (*env)->NewStringUTF(env,"C string points to actual String."); } } return javaStr; }
三、释放字符串
通过GetStringChars函数和GetStringUTFChars函数获得的C字符串在原生代码中使用完成后要正确的释放,否则会造成内存泄漏。和上面一样,释放函数也是有两个。ReleaseStringUTFChars和ReleaseStringChars,分别释放UTF-8格式和Unicode格式的字符串。
该函数有三个参数,第一个上篇博客已说过,不多说,第二个和第三个分别表示Java字符串和C字符串
本工程源码下载
相关文章推荐
- NDK开发之字符串操作
- android:ellipsize属性的含义
- Qt信号与槽
- NDK开发之字符串操作
- NDK开发之字符串操作
- OK335xS canutils deal with compile error
- Win7/8/10 U盘安装方法汇总
- MVC开发模式
- hdu5384-多校 ac自动机
- Github上README.md介绍
- CSU 1672 Pool in minecraft
- 使用命令wsimport构建WebService客户端
- 如何删除github里面的仓库(学习笔记)
- 数据挖掘有哪些算法
- TCP/IP(1)基本概念
- Algorithms - Week 2-0 Stacks and Queues
- 我很喜欢电影背后这个看上去很精神分裂的故事,跟影片中那个盘根错节的故事相得益彰。好的艺术作品永远都不可能被简化成纬度单一的说教。
- 拷贝构造函数应用场景
- 项目如何脱离TFS 2010的管理
- 18.策略模式