ObjectOutputStream methods: writeBytes(String str) vs writeU



两者之间的主要区别是什么?

尽管如此,他们两个都是为了写字符串。

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()当且仅当:

  1. 您在另一端使用writeUTF(),并且
  2. 你可以接受64k的限制