我试图从文件中直接反序列化字符串,并且对于很长的字符串有一个问题:Java字符串的字符数限制等于Integer.MAX_VALUE
,即31^2-1。Java String UTF-8限制
但是我的问题是:当我有一个小于这个大小的UTF-8字符串,但是由大小超过1个字节的字符组成时会发生什么,然后我要求Java给我字节数组?
为了让它更清楚,如果我可以运行此代码会发生什么? (我没有足够的RAM):
String toPrint = "";
String string100 = "";
int max = Integer.MAX_VALUE -100;
for (int i = 0; i < 100; i += 10) {
string100 += "1234567ñ90";
}
for (int i = 0; i < max; i += 100) {
toPrint += string100;
}
System.out.println("String complete!");
byte[] byteArray = toPrint.getBytes(StandardCharsets.UTF_8);
System.out.println(byteArray.length);
System.exit(0);
它打印“字符串完成!”吗?或者它之前破裂了?
我同意可怕的表现,它只是一个概念验证XD – nicovell3
但是,那么Java如何序列化和反序列化呢?因为Java使用UTF-8数组来序列化... – nicovell3
@ nicovell3如果字符串序列化调用'String.getBytes(UTF-8)',它将失败。如果它没有失败,它将使用另一种方式转换为UTF-8。 –