jni应用(*isCopy 返回的说明)
来源:互联网 发布:程序员考试资料 编辑:程序博客网 时间:2024/06/08 14:39
在jni的一些函数中有isCopy的参数,关于jboolean *isCopy说明如下:
/* Manifest constants.
#defineJNI_TRUE
*/
当从const char* GetStringUTFChars(JNIEnv*env, jstringstring, jboolean *isCopy); JNI函数GetStringUTFChars函数中返回得到字符串B时,
1,如果B是原始字符串java.lang.String的一份拷贝,则isCopy 被赋值为JNI_TRUE。
2,如果B是和原始字符串指向的是JVM中的同一份数据,则isCopy 被赋值为JNI_FALSE。当isCopy 为JNI_FALSE时,本地代码绝不能修改字符串的内容,否则JVM中的原始字符串也会被修改,这会打破Java语言中字符串不可变的规则。
3,通常,我们不必关心JVM是否会返回原始字符串的拷贝,只需要为isCopy传递NULL作为参数。
例如:
{
char* pcTransformStr = NULL;
jboolean jbIsCopy = JNI_FALSE;
char
/* 开辟新的内存,然后把 Java 的 String jstrUserName 拷贝到这个内存中,
pcTransformStr = (*env)->GetStringUTFChars(env,jstrUserName,
int len = strlen(pcTransformStr);
if(len > 200)
{
len = 200;
}
memcpy(caCombinStr,pcTransformStr,len);
(*env)->ReleaseStringUTFChars(env,
让 Java 虚拟机释放转换生成的字符串缓冲区空间,如果不显示的调用的话,Java 虚拟机
中会一直保存该缓冲区空间,而不会被垃圾回收器回收,
return (*env)->NewStringUTF(env,
}
NativeType *Get<PrimitiveType>ArrayElements (JNIEnv *env, ArrayType array, jboolean*isCopy);
说明:一组返回基本类型数组体的函数。结果在调用相应的 Release<PrimitiveType>ArrayElements()函数前将一直有效。
由于返回的数组可能是 Java数组的副本,因此对返回数组的更改不必在基本类型数组中反映出来,直到调用了
Release<PrimitiveType>ArrayElements()。 如果 isCopy不是 NULL,*isCopy在复制完成后即被设为 JNI_TRUE。如果
未复制,则设为JNI_FALSE。
- jni应用(*isCopy 返回的说明)
- JNI: Get/ReleaseStringUTFChars和Get/ReleaseIntArrayElements的区别,isCopy是否重新分配内存的问题
- 返回对象的说明
- JNI 的应用
- 有关返回对象的说明
- 有关返回对象的说明
- 有关返回对象的说明
- JNI String 字符串 的传递与返回
- JNI 返回结构体参数的方法
- android jni 返回java的一个类
- JNI的简单应用(native)
- Android JNI 技术的应用
- ICTCLAS的JNI调用接口说明
- (一三〇)有关返回对象的说明
- Android Cocos2d-X JNI的应用(一)
- Andriod 中JNI的简单应用(HelloWorld)
- jni应用(如何访问方法Java的类)
- Hibernate的应用说明
- 何为" css sprites " ?何以为之酷?如何使用之?
- Go起步:3、变量、常量和基础类型
- 【杭电5480】Conturbatio象棋--车
- iOS开发(第三方使用)——百度地图的简单使用(定位与当前位置的显示)
- 类目 非正式协议 与 延展
- jni应用(*isCopy 返回的说明)
- Java NIO:NIO概述
- unity - 优化你的游戏
- java 重载:子类父类 与 多态动态绑定静态重载
- listen()的backlog参数和未完成队列、已完成队列的关系
- JS中&&和||用法
- 国际化:redhat7 如何设置系统语言
- hdu 1575 矩阵快速幂
- codeforces 484E Sign on Fence 可持久化线段树+二分查找