首页 > 编程语言 >JNI编程之字符串处理

JNI编程之字符串处理

时间:2023-10-12 17:26:03浏览次数:38  
标签:functions const string 编程 jstring 字符串 return JNI

  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); }

  

  

    

  

  

标签:functions,const,string,编程,jstring,字符串,return,JNI
From: https://www.cnblogs.com/luqman/p/string.html

相关文章

  • 数据库解决获取一个字段parent中某个字符串child第一次和第二次出现的位置之间的内容c
    下面就postgresql数据和oracle数据库分别提供两种解决方法--postgresql数据库解决获取一个字段parent中某个字符串child第一次和第二次出现的位置之间的内容cut--方法一selectcasewhenposition(childinparent)>0thensubstring(parent,position(childinparent)+l......
  • c# 简单的动态执行字符串
    在C#中,可以使用`CSharpCodeProvider`类动态执行C#代码。以下是一个示例,演示了如何动态执行C#命令:```csharpusingSystem;usingMicrosoft.CSharp;usingSystem.CodeDom.Compiler;usingSystem.Reflection;classProgram{staticvoidMain(){//创建CSh......
  • 开发者笔记 C++11新特性并发编程future
    上一篇介绍了<thread>文件里线程相关类,这篇将介绍C++<future>头文件里线程类,future里包含的类主要是处理异步任务,线程函数封装,线程间通信,同步,捕捉异常处理https://zhuanlan.zhihu.com/p/509118687future的引入c++11引入的future是为了解决异步通信问题的。future可以看做是数......
  • 谁将是年度编程霸主?PHP 真的跌出神坛
    全球知名TIOBE编程语言社区发布的12月编程语言排行榜,有几件有趣的现象,随着小编一起看看~下个月,TOIBE年度编程语言就会公布了!该奖项是授予2021年增长最快的编程语言,目前,C#最有可能获得年度编程语言,有趣的是,在过去的21年里,C#里从来没有获得过“TIOBE索引年度编程语言奖”,尽管它在......
  • Python word'str'(字符串前缀string prefix)的种类
    Python字符串前缀(Stringprefix) r'string'r'',用法是不会对后方字符串中的转义符进行转义,如: str=r'\n'print(str)#会直接输出\n,并不会输出换行 f'string'f'',用法是对字符进行格式化就和str.format()一样,会对{}进行格式化,如: str=f'你好,{}'......
  • 编程式导航——两种路由跳转方式
    编程式导航:通过JS的方式实现路由跳转如何实现点击按钮跳转? 一、不传参:1.通过path路径跳转(简易方便)①简写:  按钮的点击事件中写  this.$router.push('/路由路径')    比如:this.$router.push('/search') ②完整写法:this.$router.push({ ......
  • 畅想未来编程语言
    语言前端后端逻辑游戏引擎C++pyQt转pyC++主流的都用(UE,Godot,Source2,Unity...)C#.NETGodotJavaKotlin安卓原生SpringBoot案例:MinecraftHTML(CSS)Vue(Tauri)JSdartflutter跨平台PythonpyTorch,fastAPIRustTauri跨平台Bevy跨......
  • 网络编程
    1、程序中每个程序都有端⼝号80端⼝,⽹络端⼝ mysql默认3306oracle默认1521Tomcat默认80802、模拟往服务器上传⽂件,读取客户端要上传的⽂件,保存到服务器上的硬盘,服务器给客户端发个消息,"上传成功"。明确数据源:客户端上传的⽂件客户端的硬盘上的⽂......
  • 【OpenJudge】NOI / 1.5编程基础之循环控制
    25:求特殊自然数总时间限制: 1000ms 内存限制: 65536kB描述一个十进制自然数,它的七进制与九进制表示都是三位数,且七进制与九进制的三位数码表示顺序正好相反。编程求此自然数,并输出显示。输入无。输出三行:第一行是此自然数的十进制表示;第二行是此自然数的七进制表示;第三......
  • RationalDMIS2023编程学习2023
    1.编程流程简介编程(1)研读图纸----配置测针方案,确定装夹方案,规划坐标系----------打开自学习-----设定模式,设定逼近回退,设定测头角度,设定坐标系,设定移动轨迹,设定输出报告。(2)打开机器2.自学习模式的开启3.模式选择在编写程序之前先要设定好,点击黑色摇杆图样图标选择模式,模式/手动模......