Open a284628487 opened 6 years ago
利用Unicode字符数组构造新的java.lang.String对象。
jstring NewString(JNIEnv *env, const jchar *unicodeChars, jsize len);
返回Java字符串的长度(Unicode字符数)。
jsize GetStringLength(JNIEnv *env, jstring string);
返回指向字符串的Unicode字符数组的指针。该指针在调用ReleaseStringchars()前一直有效。如果isCopy非空,则在复制完成后将*isCopy设为JNI_TRUE。如果没有复制,则设为JNI_FALSE。
const jchar * GetStringChars(JNIEnv *env, jstring string, jboolean *isCopy);
通知虚拟机平台相关代码无需再访问chars。参数chars是一个指针,可通过GetStringChars()从string获得。
void ReleaseStringChars(JNIEnv *env, jstring string, const jchar *chars);
利用UTF-8字符数组构造新java.lang.String对象。
jstring NewStringUTF(JNIEnv *env, const char *bytes);
以字节为单位返回字符串的UTF-8长度。
jsize GetStringUTFLength(JNIEnv *env, jstring string);
返回指向字符串的UTF-8字符数组的指针。该数组在被ReleaseStringUTFChars()释放前将一直有效。如果isCopy不是 NULL,*isCopy在复制完成后即被设为JNI_TRUE。如果未复制,则设为JNI_FALSE。
const char* GetStringUTFChars(JNIEnv *env, jstring string, jboolean *isCopy);
通知虚拟机平台相关代码无需再访问utf。utf参数是一个指针,可利用GetStringUTFChars()从string获得。
void ReleaseStringUTFChars(JNIEnv *env, jstring string, const char *utf);
返回数组中的元素数。
jsize GetArrayLength(JNIEnv *env, jarray array);
构造新的数组,它将保存类elementClass中的对象。所有元素初始值均设为initialElement。
jarray NewObjectArray(JNIEnv *env, jsize length, jclass elementClass, jobject initialElement);
返回Object数组的元素。
jobject GetObjectArrayElement(JNIEnv *env, jobjectArray array, jsize index);
设置Object数组的元素。
void SetObjectArrayElement(JNIEnv *env, jobjectArray array, jsize index, jobject value);
用于构造新基本类型数组对象的一系列操作。
ArrayType New<PrimitiveType>Array(JNIEnv *env, jsize length);
*NewArray例程* 数组类型 NewBooleanArray() jbooleanArray NewByteArray() jbyteArray NewCharArray() jcharArray NewShortArray() jshortArray NewIntArray() jintArray NewLongArray() jlongArray NewFloatArray() jfloatArray NewDoubleArray() jdoubleArray
返回基本类型数组体的函数。结果在调用相应的ReleaseArrayElements()函数前将一直有效。由于返回的数组可能是Java数组的副本,因此对返回数组的更改不必在基本类型数组中反映出来,直到调用了ReleaseArrayElements()。如果isCopy不是 NULL,*isCopy在复制完成后即被设为JNI_TRUE。如果未复制,则设为JNI_FALSE。
NativeType *Get<PrimitiveType>ArrayElements(JNIEnv *env, ArrayType array, jboolean *isCopy);
不管布尔数组在Java虚拟机中如何表示,GetBooleanArrayElements()将始终返回一个jboolean类型的指针,其中每一字节代表一个元素(开包表示)。内存中将确保所有其它类型的数组为连续的。
*GetArrayElements例程* 数组类型 本地类型 GetBooleanArrayElements() jbooleanArray jboolean GetByteArrayElements() jbyteArray jbyte GetCharArrayElements() jcharArray jchar GetShortArrayElements() jshortArray jshort GetIntArrayElements() jintArray jint GetLongArrayElements() jlongArray jlong GetFloatArrayElements() jfloatArray jfloat GetDoubleArrayElements() jdoubleArray jdouble
void Release<PrimitiveType>ArrayElements(JNIEnv *env, ArrayType array, NativeType *elems, jint mode);
通知虚拟机平台相关代码无需再访问elems的一组函数。elems参数是一个通过使用对应的GetArrayElements()函数由 array导出的指针。 必要时,该函数将把对elems的修改复制回基本类型数组。mode参数将提供有关如何释放数组缓冲区的信息。如果elems不是 array中数组元素的副本,mode将无效。否则,mode将具有下表所述的功能:
基本类型数组释放模 动作 0 复制回内容并释放elems缓冲区 JNI_COMMIT 复制回内容但不释放elems缓冲区 JNI_ABORT 释放缓冲区但不复制回变化
多数情况下,编程人员将把“0”传给mode参数以确保固定的数组和复制的数组保持一致。其它选项可以使编程人员进一步控制内存管理,但使用时务必慎重。
*ReleaseArrayElements例程* 数组类型 本地类型 ReleaseBooleanArrayElements() jbooleanArray jboolean ReleaseByteArrayElements() jbyteArray jbyte ReleaseCharArrayElements() jcharArray jchar ReleaseShortArrayElements() jshortArray jshort ReleaseIntArrayElements() jintArray jint ReleaseLongArrayElements() jlongArray jlong ReleaseFloatArrayElements() jfloatArray jfloat ReleaseDoubleArrayElements() jdoubleArray jdouble
将基本类型数组某一区域复制到缓冲区中。
void Get<PrimitiveType>ArrayRegion(JNIEnv *env, ArrayType array, jsize start, jsize len, NativeType *buf);
*GetArrayRegion例程* 数组类型 本地类型 GetBooleanArrayRegion() jbooleanArray jboolean GetByteArrayRegion() jbyteArray jbyte GetCharArrayRegion() jcharArray jchar GetShortArrayRegion() jshortArray jshort GetIntArrayRegion() jintArray jint GetLongArrayRegion() jlongArray jlong GetFloatArrayRegion() jfloatArray jfloat GetDoubleArrayRegion() jdoubleArray jdouble
将基本类型数组的某一区域从缓冲区中复制回来的一组函数。
void Set<PrimitiveType>ArrayRegion(JNIEnv *env, ArrayType array, jsize start, jsize len, NativeType *buf);
*SetArrayRegion例程* 数组类型 本地类型 SetBooleanArrayRegion() jbooleanArray jboolean SetByteArrayRegion() jbyteArray jbyte SetCharArrayRegion() jcharArray jchar SetShortArrayRegion() jshortArray jshort SetIntArrayRegion() jintArray jint SetLongArrayRegion() jlongArray jlong SetFloatArrayRegion() jfloatArray jfloat SetDoubleArrayRegion() jdoubleArray jdouble
字符串操作
NewString
利用Unicode字符数组构造新的java.lang.String对象。
GetStringLength
返回Java字符串的长度(Unicode字符数)。
GetStringChars
返回指向字符串的Unicode字符数组的指针。该指针在调用ReleaseStringchars()前一直有效。如果isCopy非空,则在复制完成后将*isCopy设为JNI_TRUE。如果没有复制,则设为JNI_FALSE。
ReleaseStringChars
通知虚拟机平台相关代码无需再访问chars。参数chars是一个指针,可通过GetStringChars()从string获得。
NewStringUTF
利用UTF-8字符数组构造新java.lang.String对象。
GetStringUTFLength
以字节为单位返回字符串的UTF-8长度。
GetStringUTFChars
返回指向字符串的UTF-8字符数组的指针。该数组在被ReleaseStringUTFChars()释放前将一直有效。如果isCopy不是 NULL,*isCopy在复制完成后即被设为JNI_TRUE。如果未复制,则设为JNI_FALSE。
ReleaseStringUTFChars
通知虚拟机平台相关代码无需再访问utf。utf参数是一个指针,可利用GetStringUTFChars()从string获得。
数组操作
GetArrayLength
返回数组中的元素数。
NewObjectArray
构造新的数组,它将保存类elementClass中的对象。所有元素初始值均设为initialElement。
GetObjectArrayElement
返回Object数组的元素。
SetObjectArrayElement
设置Object数组的元素。
NewArray
用于构造新基本类型数组对象的一系列操作。
GetArrayElements
返回基本类型数组体的函数。结果在调用相应的ReleaseArrayElements()函数前将一直有效。由于返回的数组可能是Java数组的副本,因此对返回数组的更改不必在基本类型数组中反映出来,直到调用了ReleaseArrayElements()。如果isCopy不是 NULL,*isCopy在复制完成后即被设为JNI_TRUE。如果未复制,则设为JNI_FALSE。
不管布尔数组在Java虚拟机中如何表示,GetBooleanArrayElements()将始终返回一个jboolean类型的指针,其中每一字节代表一个元素(开包表示)。内存中将确保所有其它类型的数组为连续的。
ReleaseArrayElements
通知虚拟机平台相关代码无需再访问elems的一组函数。elems参数是一个通过使用对应的GetArrayElements()函数由 array导出的指针。 必要时,该函数将把对elems的修改复制回基本类型数组。mode参数将提供有关如何释放数组缓冲区的信息。如果elems不是 array中数组元素的副本,mode将无效。否则,mode将具有下表所述的功能:
多数情况下,编程人员将把“0”传给mode参数以确保固定的数组和复制的数组保持一致。其它选项可以使编程人员进一步控制内存管理,但使用时务必慎重。
GetArrayRegion
将基本类型数组某一区域复制到缓冲区中。
SetArrayRegion例程
将基本类型数组的某一区域从缓冲区中复制回来的一组函数。