方法中有一个奇怪的限制java.io.DataOutputStream.writeUTF(String str)
,它将UTF-8编码的字符串的大小限制为65535
字节:
if (utflen > 65535)
throw new UTFDataFormatException(
"encoded string too long: " + utflen + " bytes");
很奇怪,因为:
static int writeUTF(String str, DataOutput out)
此类的内部方法可以轻松解决此限制。java.io.DataInputStream.readUTF()
。根据上述内容,我无法理解该writeUTF
方法中这种限制的目的。我错过或误解了什么?
状态的JavadocDataOutputStream.writeUTF
:
首先,将两个字节写入输出流,就像通过
writeShort
给出后续字节数的方法一样。该值是实际写入的字节数,而不是字符串的长度。
两个字节表示16位:在16位中,一个人可以编码的最大整数为2^16
==65535。DataInputStream.readUTF
具有完全相同的限制,因为它首先以2字节整数的形式读取要使用的UTF-8字节数,再次只能具有最大值65535。
writeUTF
首先写入具有长度的两个字节,其结果与调用writeShort
该长度的结果相同,然后写入UTF编码的字节。writeUTF
实际上并没有调用writeShort
-它byte[]
使用2个字节的长度和UTF字节来构建一个单字节。但这就是为什么Javadoc说“好像通过writeShort
方法”而不是仅仅“通过writeShort
方法”的原因。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句