首页 > 解决方案 > XML 文件中的单行最大长度限制是多少?

问题描述

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

标签: android

解决方案


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

我可能通过测试找到了答案。正如您所说,一个 char 存储在两个字节上。所以 29k char 将是 58k 字节,而 51k 将是 102k 字节。“逻辑”限制为 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) 个字符。我没有找到任何这样说的官方文档,但这是我在测试时发现的


推荐阅读