[java] Если вы вызываете ReleaseStringUTFChars, если GetStringUTFChars вернули копию?


Answers

Question

В книге «Essential JNI: Java Native Interface» Роб Гордона приведен следующий пример кода для преобразования строки j в строку C:

const char* utf_string;
jboolean isCopy;
utf_string = env->GetStringUTFChars(str, &isCopy);
/* ... use string ... */
if (isCopy == JNI_TRUE) {
    env->ReleaseStringUTFChars(str, utf_string);
}

Обратите внимание, что он вызывает вызовы ReleaseStringUTFChars если isCopy - true.

Но книга Java Native Interface: Руководство программиста и спецификация (альтернативная ссылка: http://192.9.162.55/docs/books/jni/html/objtypes.html#5161 ) гласит:

Вызов ReleaseString-Chars необходим, если GetStringChars установил * isCopy в JNI_TRUE или JNI_FALSE. ReleaseStringChars либо освобождает копию, либо отключает экземпляр, в зависимости от того, вернула ли GetStringChars копию или нет.

Я прав, если предположить, что это ошибка в книге Гордона?




Links



Tags

java java   jni