两者之间的主要区别是什么?
它们仍然都是用于编写字符串。
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.
我什么时候应该使用其中一种而不是另一种?
它在文档中...来自DataOutput.writeBytes(String) http://docs.oracle.com/javase/7/docs/api/java/io/DataOutput.html#writeBytes%28java.lang.String%29:
将字符串写入输出流。对于字符串 s 中的每个字符(按顺序),将一个字节写入输出流。如果 s 为 null,则抛出 NullPointerException。
如果 s.length 为零,则不写入任何字节。否则,先写入字符 s[0],然后写入 s1 http://docs.oracle.com/javase/7/docs/api/java/io/DataOutput.html#writeBytes%28java.lang.String%29, 等等;最后写入的字符是 s[s.length-1]。对于每个字符,将按照 writeByte 方法的方式写入一个字节,即低位字节。字符串中每个字符的高位八位将被忽略。
换句话说,“Sod Unicode,我们不关心 ISO-8859-1 之外的任何字符。哦,我们假设您也不关心字符串的长度。”
注意writeBytes
甚至没有尝试detect数据损坏 - 如果您写出 ISO-8859-1 中不存在的字符,它只会默默地删除高字节。
拒绝吧 -writeUTF
是你的朋友...假设你的字符串长度小于 64K。
当然,如果您尝试实现的协议本身需要单字节编码(ISO-8859-1 或 ASCII)并且不使用长度,那么writeBytes
might是合适的 - 但我个人可能会自己执行文本到字节的转换,然后使用write(byte[])
相反...更清楚。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)