XML 文件中的一行最大长度限制是多少?



最近我遇到了一个与矢量 xmlpath属性中的最大行(字符串)长度限制相关的问题。就我而言,51k 字符似乎是一个超限,而 29k 是可以的。无论如何,我想它与某些特定类型的xml无关,例如manifeststringstyleattrdrawablelayout或任何其他,我敢肯定这是Android项目中任何xml的一般限制。
所以我很好奇限制是什么(我的意思是 Android xml 中一行允许的确切最大字符数)以及为什么AndroidStudio在矢量导入时不应用它?看起来谷歌本身并不知道这个限制,或者可能是 gradle 的限制。
请不要指出长字符串不好 - 我确实意识到了这一点,它并没有取消我的问题。
伙计们,请仔细阅读我的问题和其他您可能认为是骗子的问题!我的问题没有答案。
安卓字符串.xml长度SO问题有绝对其他的含义。Asker询问是否有办法获取strings.xml中的字符串计数。除此之外,我的问题与strings.xml完全无关,而是与任何xml文件有关。
Android IndexOutOfBound Resource getString 的异常绝对是关于另一个异常/问题,绝对没有回答我的问题。同样,我的问题与strings.xml完全无关。
字符串在java中可以容纳的最大数据量是多少?不是我要问的,而是关于JavaString类限制。即使它相关,那么限制也是大约Integer.MAX/2(因为 Unicode 需要 2 个字节来编码 1 个字符),所以它无论如何都不是 51k 个字符。

我猜读你的问题时,限制将在 29k 到 51k 之间,但被剪辑到一个逻辑数字

我可能通过测试它找到了答案。 正如你所说,一个字符存储在两个字节上。所以 29k 字符将是 58k 字节,51k 是 102k 字节。 "逻辑"限制将是 65536,因为它是 2^16。所以 char 中的限制是 2^16/2 或 2^15,即 32768

我测试将字符串放入我的字符串中.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) 个字符。我没有找到任何官方文档这么说,但这是我在测试时发现的

最新更新