java中的字符串类型是String,对应的jni类型是jstring,由于jstring是引用类型,所以我们不能像基本数据类型那样去使用它,我们需要使用JNIEnv中的函数去处理jstring,下面介绍一些常用的字符串处理函数。

  1.GetStringUTFChars()

//作用:将jstring类型转化为c中的const char *类型
//参数说明:
//string:jstring类型字符串
//isCopy:两种取值,JNI_TRUE/JNI_FALSE;JNI_TRUE表示返回的是c字符串是java类型字符串的拷贝,JNI_FALSE表示c字符串直接指向java字符串;实际开发中,我们不关心这个值是什么,直接传入nullptr即可
const char* GetStringUTFChars(jstring string, jboolean* isCopy)
{ return functions->GetStringUTFChars(this, string, isCopy); }

  2.ReleaseStringUTFChars()

//作用:用于释放通过GetStringUTFChars()函数获取的c字符串的内存,使用完这个c字符串之后一定要用这个函数释放内存,防止内存泄漏
//参数说明:
//string:jstring类型的字符串
//utf:对应的c字符串
void ReleaseStringUTFChars(jstring string, const char* utf)
{ functions->ReleaseStringUTFChars(this, string, utf); }

  3.NewStringUTF()

//作用:将c字符串转化为jstring类型
jstring NewStringUTF(const char* bytes)
{ return functions->NewStringUTF(this, bytes); }

  4.NewString()

//作用:将utf-16字符数组转化为jstring字符串
//参数说明:
//unicodeChars:字符数组
//len:字符数组的长度
jstring NewString(const jchar* unicodeChars, jsize len)
{ return functions->NewString(this, unicodeChars, len); }

  5.GetStringUTFLength()

//作用:获取jstring字符串的utf-8编码字符串长度
jsize GetStringUTFLength(jstring string)
{ return functions->GetStringUTFLength(this, string); }

  6.GetStringLength()

//作用:获取jstring字符串的utf-16编码字符串长度
jsize GetStringLength(jstring string)
{ return functions->GetStringLength(this, string); }

  7.GetStringChars()

//作用:将jstring类型的字符串转化为utf-16编码的字符数组
const jchar* GetStringChars(jstring string, jboolean* isCopy)
{ return functions->GetStringChars(this, string, isCopy); }

  8.ReleaseStringChars()

//释放由GetStringChars()函数获取的字符数组的内存
void ReleaseStringChars(jstring string, const jchar* chars)
{ functions->ReleaseStringChars(this, string, chars); }

  9.GetStringRegion()

//用于从Java字符串对象中获取指定范围的UTF-16编码的字符数据并存储在一个字符数组中
void GetStringRegion(jstring str, jsize start, jsize len, jchar* buf)
{ functions->GetStringRegion(this, str, start, len, buf); }

  10.GetStringUTFRegion()

//用于从Java字符串对象中获取指定范围的UTF-8编码的字符数据并存储在一个字符数组中
void GetStringUTFRegion(jstring str, jsize start, jsize len, char* buf)
{ return functions->GetStringUTFRegion(this, str, start, len, buf); }

  

  

    

  

  

JNI编程之字符串处理的更多相关文章

  1. Android jni 编程1(对基本类型字符串的操作)

    最近一直在学安卓的jni,主要参考的是黑马程序员的视频教程,讲的确实不错. 那就自己总结一下吧,算是对学习的复习. 这篇博客也主要参考了这位博主:http://www.cnblogs.com/acti ...

  2. JNI编程(二) —— 让C++和Java相互调用(2)

    3.getRamdomOrder() 这个方法会从backend得到一个随机的Order对象(抱歉这里“Random”拼错了),然后再调用java中相应的通知方法来通知foreground.getRa ...

  3. JNI编程(二) —— 让C++和Java相互调用(1)

    自己在外面偷偷的算了下,又有将近两个月没更新过blog了.趁着今天有兴致,来更新JNI编程的第二篇文章.在第一篇里,大概介绍了JNI的特点.用途和优劣.并且做一个最简单的JNI的例子,不过说实话那个例 ...

  4. Android中JNI编程的那些事儿(1)

    转:Android中JNI编程的那些事儿(1)http://mobile.51cto.com/android-267538.htm Android系统不允许一个纯粹使用C/C++的程序出现,它要求必须 ...

  5. 【转】Android JNI编程—JNI基础

    原文网址:http://www.jianshu.com/p/aba734d5b5cd 最近看到了很多关于热补的开源项目——Depoxed(阿里).AnFix(阿里).DynamicAPK(携程)等,它 ...

  6. JNI编程实现(Linux)

    JNI是Java Native Interface的缩写,是Java平台的本地调用,从Java1.1就成为了Java标准的一部分,它允许Java代码和其它语言的代码进行互相调用,只要调用约定支持即可, ...

  7. 解析Java的JNI编程中的对象引用与内存泄漏问题

    JNI,Java Native Interface,是 native code 的编程接口.JNI 使 Java 代码程序可以与 native code 交互——在 Java 程序中调用 native ...

  8. Android jni 编程(参数的传递,成员,方法的)相互访问

    package com.test.androidjni; import android.app.Activity; import android.os.Bundle; import android.u ...

  9. Android jni 编程入门

    本文将介绍如何使用eclipse和ndk-build来编写一个基于Android4.4版本的包含有.so动态库的安卓程序. 前提是已经安装和配置好了诸如SDK,NDK等编译环境.下面开始编程! 1 程 ...

  10. 在 JNI 编程中避免内存泄漏

    JAVA 中的内存泄漏 JAVA 编程中的内存泄漏,从泄漏的内存位置角度可以分为两种:JVM 中 Java Heap 的内存泄漏:JVM 内存中 native memory 的内存泄漏. Java H ...

随机推荐

  1. 区块链应用:椭圆曲线数字签名算法ECDSA

    1 椭圆曲线密码学 椭圆曲线密码学(Elliptic Curve Cryptography,缩写ECC),是基于椭圆曲线数学理论实现的一种非对称加密算法.椭圆曲线在密码学中的使用是在1985年有Nea ...

  2. Linux系统运维之MYSQL数据库集群部署(主从复制)

    一.介绍 Mysql主从复制,前段时间生产环境部署了一套主从复制的架构,当时现找了很多资料,现在记录下 二.拓扑图 三.环境以及软件版本 主机名 IP 操作系统 角色 软件版本 MysqlDB_Mas ...

  3. Windows下打开指定目录并定位到具体文件

    一.在Windows上,网上流传的几种方法可以打开目录并定位到指定文件: 1.使用系统调用: 使用system()函数执行操作系统的命令行命令. 在命令行命令中,使用explorer /select, ...

  4. LAL v0.36.7发布,Customize Sub,我有的都给你

    Go语言流媒体开源项目 LAL 今天发布了v0.36.7版本. LAL 项目地址:https://github.com/q191201771/lal 老规矩,简单介绍一下: ▦ Customize S ...

  5. hdfs小文件合并

    HDFS small file merge 1.hive Settings There are 3 settings that should be configured before archivin ...

  6. Vue中 router与route的区别

    $route对象 该对象表示当前的路由信息,包含当前URL解析得到的信息.包含当前的路径,参数,query对象等.其常用方法如下所示: $route.path 字符串,对应当前路由的路径,总是解析为绝 ...

  7. 从原理聊JVM(四):JVM中的方法调用原理

    1 引言 多态是Java语言极为重要的一个特性,可以说是Java语言动态性的根本,那么线程执行一个方法时到底在内存中经历了什么,JVM又是如何确定方法执行版本的呢? 2 栈帧 JVM中由栈帧存储方法的 ...

  8. 语音合成技术3:HierVST: Hierarchical Adaptive Zero-shot Voice Style Transfer

    HierVST: 分层自适应零样本语音风格转换 摘要: 尽管语音风格转换(VST)领域取得了快速进展,但最近的零样本VST系统仍然缺乏将新的说话者的语音风格进行转换的能力.在本文中,我们提出了Hier ...

  9. FreeSWITCH通过mod_mariadb原生连接MySQL

    前言 根据官方更新说明(https://freeswitch.org/confluence/display/FREESWITCH/FreeSWITCH+1.10.x+Release+notes),从1 ...

  10. Midjourney 创建私人画图机器人(保姆级教程)

    本教程收集于:AIGC从入门到精通教程汇总 之前给大家介绍过了Midjourney 的注册教程:AI绘画:Midjourney 注册(保姆级教程) 也有Stable Diffusion(开源)的本地搭 ...