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

时间:2019-05-08 07:46:28

标签: android

Recently I've faced an issue related to max line (string) length limit in a path attribute of vector xml。在我的情况下,51k字符似乎是一个超限,而29k可以。无论如何,我想它与某种特定类型的xml无关,例如manifeststringstyleattrdrawablelayout或其他任何方式,我确定这是Android项目中所有xml的通用限制。
因此,我很好奇限制是什么(我的意思是Android xml中允许一行的确切最大字符数),为什么AndroidStudio在向量导入时未应用该限制?看来Google本身并不了解此限制,或者可能不了解其限制。
请不要指出长字符串是不好的-我确实意识到了这一点,但这并不能消除我的问题。
伙计们,请仔细阅读我的问题以及其他您可能认为是骗子的问题!那里没有我的问题的答案。
Android strings.xml length因此,问题绝对具有其他含义。询问器询问是否有一种方法来获取strings.xml中的字符串数。除此之外,我的问题与strings.xml并不完全相关,但与任何xml文件都没有。
Android IndexOutOfBound Exception for resource getString绝对是另一个例外/问题,绝对不能回答我的问题。同样,我的问题与strings.xml根本无关。
What is the maximum amount of data that a String can hold in java?不是我要问的,它是关于Java String类限制的。即使与之相关,但限制约为Integer.MAX / 2(Unicode的cuz编码需要2个字节来编码1个字符),因此无论如何都不是51k个字符。

1 个答案:

答案 0 :(得分:2)

我猜到你的问题是,限制在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)个字符。我没有找到任何官方文件这么说,但这是我在测试中发现的