GetStringUTFChars和ReleaseStringUTFChars如何工作?

时间:2015-04-17 15:29:17

标签: java java-native-interface

stackoverflow.com/questions/5859673表示无论是否复制字符串,都必须调用ReleaseStringUTFChars()。那么jboolean *isCopy中的参数GetStringUTFChars()有什么用呢?

当原始jstring超出范围时,我可以释放C字符串吗?例如,在这个伪代码中:

static const char *cstr;

JNIEXPORT void JNICALL Java_com_Run(JNIEnv *e, jobject obj, jstring s) {
    cstr = (*e)->GetStringUTFChars(e, s, 0);
}

void cfunc() {
    // Can I use and release the cstr here? How?
}

根据文档,我必须通过NewGlobalRef()获取引用,如果我想在JNI调用结束后使用java对象,则稍后发布。此规则对通过GetStringUTFChars()检索的字符串有效吗?

1 个答案:

答案 0 :(得分:1)

isCopy

GetStringUTFChars()参数只是尝试提供与其他类似JNI函数一致的签名。在所有已知的JVM实现中,它总是 JNI_TRUE ,因为Java字符串在内部以不兼容的UCS-16格式存储。

但是,如果不知道上下文,就无法释放cstr