Подтвердить что ты не робот

Строка кода Java

Вернулась ли строка из GetStringUTFChars() с символом с нулевым завершением? Или мне нужно определить длину, используя GetStringUTFLength, и null завершает ее сам?

4b9b3361

Ответ 1

Да, GetStringUTFChars возвращает строку с нулевым завершением. Тем не менее, я не думаю, что вы должны смириться с этим, вместо этого вы должны найти авторитетный онлайн-источник, который отвечает на этот вопрос.

Давайте начнем с фактической Java Native Interface Specification, где говорится:

Возвращает указатель на массив байтов, представляющий строку в модифицированной кодировке UTF-8. Этот массив действителен до тех пор, пока он не будет выпущен ReleaseStringUTFChars().

О, удивительно, что он не говорит, завершено ли оно нулевым или нет. Мальчик, это кажется огромным недосмотром, и, к счастью, кто-то был достаточно любезен, чтобы зарегистрировать эту ошибку в Sun Java database database еще в 2008 году. ошибка указывает на аналогичную, но различную ошибку документации (которая была закрыта без действий), что говорит о том, что читатели покупают книгу " Интерфейс Java Native: руководство программиста и спецификация", так как есть предположение, что это станет новой спецификацией для JNI.

Но мы ищем авторитетный онлайн-источник, и это не авторитетный (он еще не спецификация), ни онлайн.

К счастью, обзоры для упомянутой книги о некотором популярном розничном магазине онлайн-книг предполагают, что книга свободно доступна в Интернете от Sun, и это, по крайней мере, удовлетворит онлайн-часть. Sun Веб-страница JNI имеет ссылку, которая выглядит мучительно близко, но эта ссылка, к сожалению, не идет туда, где говорится, что она идет.

Поэтому, боюсь, я не могу указать вам на авторитетный источник в Интернете, и вам придется купить книгу (это действительно хорошая книга), где она вам объяснит, что:

Строки UTF-8 всегда заканчиваются символом '\0', тогда как строки Unicode - нет. Чтобы узнать, сколько байтов необходимо для представления jstring в формате UTF-8, программисты JNI могут либо вызвать функцию ANSI C strlen по результату GetStringUTFChars, либо вызвать функцию JNI GetStringUTFLength on непосредственно ссылку jstring.

(Обратите внимание, что в приведенном выше предложении "Юникод" означает "UTF-16", или, точнее, "внутреннее двухбайтовое строковое представление, используемое Java, хотя поиск доказательств этого остается в качестве упражнения для читателя. )

Ответ 2

Да, строки, возвращаемые GetStringUTFChars(), заканчиваются нулем. Я использую его в своем приложении, поэтому доказал это экспериментально, скажем так. Хотя документация Oracle отстойна, альтернативные источники более информативны: Учебник по Java-интерфейсу Java (JNI)