Каково ограничение максимальной длины в одну строку в файлах XML? - PullRequest
0 голосов
/ 08 мая 2019

Недавно я столкнулся с проблемой, связанной с ограничением максимальной длины строки (строки) в атрибуте path вектора xml . В моем случае 51 тыс. Символов кажется чрезмерным, в то время как 29 тыс. В порядке. Во всяком случае, я думаю, что это не связано с каким-то конкретным видом XML, как manifest, string, style, attr, drawable, layout или любым другим, я уверен, что это общий ограничение для любого xml в проекте Android.
Так что мне любопытно каков предел (я имею в виду точное максимальное число символов, разрешенное для одной строки в Android XML) и почему он не применяется AndroidStudio во время импорта вектора? Похоже, что Google сам не знает об этом пределе или, возможно, является ограничением.
Пожалуйста, не указывайте мне, что длинные строки плохие - я это понимаю, и это не отменяет мой вопрос.
Ребята, пожалуйста, прочитайте мой вопрос и другие вопросы, которые вы, возможно, думаете, являются обманщиками внимательно! Там нет ответа на мой вопрос.
Длина Android strings.xml ТАК вопрос имеет совершенно другое значение. Аскер спрашивает, есть ли способ получить количество строк в strings.xml. Кроме того, мой вопрос относится не только к strings.xml, а к любому XML-файлу.
Android IndexOutOfBound Исключение для ресурса getString относится к совершенно другому исключению / проблеме и не дает абсолютно НЕТ ответа на мой вопрос. Опять же, мой вопрос вообще не имеет отношения к strings.xml.
Каков максимальный объем данных, который может содержать строка в java? - это не то, о чем я спрашиваю, а об ограничении класса Java String. Даже если он связан, тогда предел составляет около Integer.MAX / 2 (потому что для Unicode требуется 2 байта для кодирования 1 символа), поэтому его значение не равно 51 тыс. Символов.

1 Ответ

2 голосов
/ 08 мая 2019

Я полагаю, что при чтении вашего вопроса предел был где-то между 29k и 51k, но обрезан до логического числа

Я мог бы найти ответ, протестировав его.Как вы сказали, символ хранится в двух байтах.Таким образом, символ 29 Кбайт будет 58 Кбайт, а 51 Кбайт - 102 Кбайт.«Логический» предел будет 65536, так как он равен 2 ^ 16.таким образом, предел в char равен 2 ^ 16/2 или 2 ^ 15, что составляет 32768

. Я протестировал, чтобы поместить строки в мой string.xml (в основном длинную строку 'a')

<string name="length_test32000">(32 000 a)</string>
<string name="length_test32767">(32 767 a)</string>
<string name="length_test32768">(32 768 a)</string>
<string name="length_test32769">(32 769 a)</string>
<string name="length_test33000">(33 000 a)</string>

Затем я попытался записать их размер:

String test32k = getString(R.string.length_test32000);

String test32k767 = getString(R.string.length_test32767);
String test32k768 = getString(R.string.length_test32768);
String test32k769 = getString(R.string.length_test32769);

String test33k = getString(R.string.length_test33000);

Log.i("tag", "32000 : "+test32k.length());
Log.i("tag", "32767 : "+test32k767.length());
Log.i("tag", "32768 : "+test32k768.length());
Log.i("tag", "32769 : "+test32k769.length());
Log.i("tag", "33000 : "+test33k.length());

Вот результаты:

I/tag: 32000 : 32000
I/tag: 32767 : 32767
I/tag: 32768 : 16
I/tag: 32769 : 16
I/tag: 33000 : 16

Начиная с 32768, он кажется усеченным, поэтому я регистрирую то, что было внутри

Log.i("tag", "32768 : "+test32k768.length() + " content : " + test32k768);

И результат:

I/tag: 32768 : 16 content : STRING_TOO_LARGE

Максимальный символ кажется равным 32767 (2 ^ 15 - 1) символов.Я не нашел ни одного официального документа, который бы сказал это, но это то, что я нашел во время тестирования

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...