And*_*niy 10 java dataoutputstream restrictions
方法中存在一个奇怪的限制java.io.DataOutputStream.writeUTF(String str),它将utf-8编码字符串的大小限制为65535字节:
if (utflen > 65535)
throw new UTFDataFormatException(
"encoded string too long: " + utflen + " bytes");
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为:
static int writeUTF(String str, DataOutput out)方法可以轻松解决此限制java.io.DataInputStream.readUTF().根据上面我无法理解这种限制writeUTF方法的目的.我错过了什么或误解了什么?
Erw*_*idt 14
该的Javadoc中DataOutputStream.writeUTF指出:
首先,将两个字节写入输出流,就像通过
writeShort给出要遵循的字节数的 方法一样.该值是实际写出的字节数,而不是字符串的长度.
两个字节表示16位:在16位中,可以编码的最大整数是2^16== 65535.
DataInputStream.readUTF具有完全相同的限制,因为它首先以2字节整数的形式读取要使用的UTF-8字节数,它最多只能有65535的最大值.
writeUTF首先写入两个具有长度的字节,其结果与调用writeShort长度相同,然后写入UTF编码的字节.writeUTF实际上并没有调用writeShort- 它构建了一个byte[]具有2字节长度和UTF字节的单个.但这就是为什么Javadoc说" 好像通过writeShort方法"而不仅仅是"通过writeShort方法".