两者之间的主要区别是什么?
尽管如此,他们两个都是为了写字符串。
public void writeUTF(String str)
throws IOException
Primitive data write of this String in modified UTF-8 format.
与
public void writeBytes(String str)
throws IOException
Writes a String as a sequence of bytes.
我什么时候应该用一个而不是另一个?
它在文档中。。。来自DataOutput.writeBytes(String)
:
将字符串写入输出流。对于字符串s中的每个字符,按顺序,将向输出流写入一个字节。如果s为null,则会引发NullPointerException。
如果s.length为零,则不写入任何字节。否则,首先写入字符s[0],然后写入s1,依此类推;写入的最后一个字符是s[s.length-1]。对于每个字符,都会按照writeByte方法的方式写入一个字节,即低位字节。字符串中每个字符的高阶八位将被忽略。
换句话说;Sod Unicode,我们不关心任何不在ISO-8859-1中的字符。哦,我们假设你也不在乎绳子的长度"
请注意,writeBytes
甚至不会尝试检测数据损坏-如果您写出一个不在ISO-8859-1中的字符,它只会无声地丢弃高字节。
说不吧——writeUTF
是你的朋友。。。假设字符串的长度小于64K。
当然,如果您要实现的协议本身需要单字节编码(ISO-8859-1或ASCII),并且不使用长度,那么writeBytes
可能是合适的-但我个人可能会自己执行文本到字节的转换,然后使用write(byte[])
。。。它更清楚了。
如果您的String
可能包含使用宽字符的内容(基本上是标准ASCII之外的任何内容),请使用UTF。如果您的输出需要每个字符一个字节的编码,例如许多网络协议中的头标签,请使用字节。
当数据使用UTF存储时,它会存储在通用字符集中,因此当字符串数据包含ASCII字符以外的字符时,请使用writeUTF,否则writeByte即可。
在adion中,writeUTF的最大长度为65535字节(字节数组的长度取决于String的每个字符)。
如果String的UTF表示大于此值,则必须使用来自自己的转换,并使用Jon所说的write(byte[])
。
您应该使用readUTF()
当且仅当:
- 您在另一端使用
writeUTF()
,并且 - 你可以接受64k的限制