字符串*的UTF8表示对于常量池来说太长

时间:2014-09-08 05:43:52

标签: java string utf-8

我有一个String,然后将其转换为JSON对象:

public static final String JSON_STRING = "json string";
JSONObject jsonObject = new JSONObject(JSON_STRING);

但有时当String太长时,我会收到错误:

  

字符串*的UTF8表示对于常量池来说太长了

还有其他方法可以获得如此长的字符串吗?

2 个答案:

答案 0 :(得分:2)

字符串以class file格式存储在UTF-8中,限制为65535字节。 在运行时构造的字符串可以是much longer

因此,您应该在多个字符串常量上拆分字符串常量,并在使用前连接它们或从文本文件中读取值。

答案 1 :(得分:1)

据我所知,JVM(特别是类文件格式)的限制为65535个字符。

来自Oracle docs

  

字段和方法名称,字段和方法描述符的长度,   和其他常量字符串值(包括那些引用的值)   ConstantValue(§4.7.2)属性限制为65535个字符   CONSTANT_Utf8_info结构的16位无符号长度项   (§4.4.7)。