JNI函数功能一览
引用https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html
1. JNI Native String 函数
JNI支持两种编码 Unicode (16-bit characters) and UTF-8 (encoded in 1-3 bytes) 形式的string,其中UTF-8形式的类似以\0结尾的c风格字符串
1. 函数有
// UTF-8 String (encoded to 1-3 byte, backward compatible with 7-bit ASCII)
// Can be mapped to null-terminated char-array C-string
const char * GetStringUTFChars(JNIEnv *env, jstring string, jboolean *isCopy);
// Returns a pointer to an array of bytes representing the string in modified UTF-8 encoding.
void ReleaseStringUTFChars(JNIEnv *env, jstring string, const char *utf);
// Informs the VM that the native code no longer needs access to utf.
jstring NewStringUTF(JNIEnv *env, const char *bytes);
// Constructs a new java.lang.String object from an array of characters in modified UTF-8 encoding.
jsize GetStringUTFLength(JNIEnv *env, jstring string);
// Returns the length in bytes of the modified UTF-8 representation of a string.
void GetStringUTFRegion(JNIEnv *env, jstring str, jsize start, jsize length, char *buf);
// Translates len number of Unicode characters beginning at offset start into modified UTF-8 encoding
// and place the result in the given buffer buf.
// Unicode Strings (16-bit character)
const jchar * GetStringChars(JNIEnv *env, jstring string, jboolean *isCopy);
// Returns a pointer to the array of Unicode characters
void ReleaseStringChars(JNIEnv *env, jstring string, const jchar *chars);
// Informs the VM that the native code no longer needs access to chars.
jstring NewString(JNIEnv *env, const jchar *unicodeChars, jsize length);
// Constructs a new java.lang.String object from an array of Unicode characters.
jsize GetStringLength(JNIEnv *env, jstring string);
// Returns the length (the count of Unicode characters) of a Java string.
void GetStringRegion(JNIEnv *env, jstring str, jsize start, jsize length, jchar *buf);
// Copies len number of Unicode characters beginning at offset start to the given buffer buf
-
说明
-
对于最常用的const char * GetStringUTFChars(JNIEnv *env, jstring string, jboolean *isCopy);
-
当分配失败 GetStringUTFChars返回NULL,所以一般调用后进行NULL值判断
-
第三个参数,代表是否拷贝,如果是JNI_TRUE,代表拷贝一份string的内容给返回值的指针
如果是JNI_FALSE,代表返回直接指向string的指针,这种情况下native侧不应该修改指针的值
JNI尽可能返回一个直接指向string的指针,并且我们大多数都传递NULL
-
-
关于 ReleaseStringUTFChars()
当你不需要返回GetStringUTFChars返回的指针释放内存和引用时,使用ReleaseStringUTFChars函数进行垃圾回收
-
NewStringUTF()
从C风格的字符串创建jstring字符串
-
一个圆,圆内是你会的,圆外是你不知道的。而当圆越大,你知道的越多,不知道的也越多了