两者之间的主要区别是什么?
它们两个都是用于编写字符串。
public void writeUTF(String str)
throws IOException
Primitive data write of this String in modified UTF-8 format.
VS
public void writeBytes(String str)
throws IOException
Writes a String as a sequence of bytes.
我什么时候应该使用一个而不是另一个?
答案 0 :(得分:8)
来自DataOutput.writeBytes(String)
的文档......
将字符串写入输出流。对于字符串s中的每个字符,按顺序,将一个字节写入输出流。如果s为null,则抛出NullPointerException。
如果s.length为零,则不写入任何字节。否则,首先写入字符s [0],然后写入s 1,依此类推;写的最后一个字符是s [s.length-1]。对于每个字符,写入一个字节,即低位字节,与writeByte方法完全相同。字符串中每个字符的高位8位将被忽略。
换句话说," Sod Unicode,我们不关心任何不在ISO-8859-1中的字符。哦,我们假设你不关心字符串的长度。"
请注意,writeBytes
甚至不会尝试检测数据损坏 - 如果您写出的字符不在ISO-8859-1中,它将会只是默默地丢弃高字节。
请说不 - writeUTF
是你的朋友......假设你的字符串长度小于64K。
当然,如果你有一个协议,你试图实现哪个本身需要单字节编码(ISO-8859-1或ASCII)并且不使用长度,那么{{1 可能是合适的 - 但我个人可能会自己执行文本到字节的转换,然后使用writeBytes
代替......它更清晰。< / p>
答案 1 :(得分:1)
如果您的String
有可能持有使用宽字符的内容(基本上是标准ASCII以外的任何内容),请使用UTF。如果您的输出需要每个字符一个字节的编码,例如许多网络协议中的标头标签,请使用字节。
答案 2 :(得分:1)
当使用UTF存储数据时,它存储在通用字符集中,因此当字符串数据包含非ASCII字符时使用writeUTF,否则writeByte就可以了。
答案 3 :(得分:1)
在adition中,writeUTF的最大长度为65535字节(字节数组的长度取决于字符串的每个字符)。
如果你的String的UTF表示大于那个,你必须使用你自己的转换,并使用Jon所说的write(byte[])
。
答案 4 :(得分:0)
当且仅当:
时,您应该使用readUTF()
writeUTF()
,