Java ObjectOutputStream方法:writeBytes(字符串str)与writeUTF(字符串s);

Java ObjectOutputStream方法:writeBytes(字符串str)与writeUTF(字符串s);,java,io,objectinputstream,Java,Io,Objectinputstream,这两者的主要区别是什么 但它们都是用来写字符串的 public void writeUTF(String str) throws IOException Primitive data write of this String in modified UTF-8 format. vs 什么时候应该使用一个而不是另一个?如果您的字符串可能包含使用宽字符的内容(基本上是标准ASCII以外的内容),请使用UTF。如果输出的内容要求每个字符编码一个字节,例如许多网络协议中的

这两者的主要区别是什么

但它们都是用来写字符串的

public void writeUTF(String str)
              throws IOException

Primitive data write of this String in modified UTF-8 format.
vs


什么时候应该使用一个而不是另一个?

如果您的
字符串可能包含使用宽字符的内容(基本上是标准ASCII以外的内容),请使用UTF。如果输出的内容要求每个字符编码一个字节,例如许多网络协议中的标题标签,请使用字节。

当使用通用字符集存储数据时,请使用writeUTF,因此当字符串数据包含ASCII字符以外的内容时,否则writeByte就可以了。

它在文档中。。。发件人:

将字符串写入输出流。对于字符串s中的每个字符(按顺序),一个字节写入输出流。如果s为null,则引发NullPointerException

如果s.length为零,则不写入字节。否则,首先写入字符s[0],然后写入字符s,依此类推;最后写入的字符是s[s.length-1]。对于每个字符,都会写入一个字节,即低阶字节,其方式与writeByte方法完全相同。忽略字符串中每个字符的高阶8位

换句话说,“Sod Unicode,我们不关心ISO-8859-1中没有的任何字符。哦,我们假设您也不关心字符串的长度。”

请注意,
writeBytes
甚至不尝试检测数据损坏-如果您写出的字符不在ISO-8859-1中,它只会无声地删除高位字节

只要说不——
writeUTF
是你的朋友。。。假设字符串长度小于64K


当然,如果您有一个自己需要单字节编码(ISO-8859-1或ASCII)且不使用长度的协议,那么
writeBytes
可能是合适的-但我个人可能会自己执行文本到字节的转换,然后使用
write(byte[])
。。。更清楚。

另外,writeUTF的最大长度为65535字节(字节数组的长度取决于字符串的每个字符)


如果字符串的UTF表示大于此值,则必须使用自己的转换,并使用Jon所说的
write(byte[])

如果且仅当满足以下条件时,才应使用
readUTF()

  • 您正在另一端使用
    writeUTF()
    ,并且
  • 您可以接受64k限制

  • 这应该是评论,而不是回答是的,你说得对。对不起,64 kb的字符串是多少?
    public void writeBytes(String str)
                    throws IOException
    
    Writes a String as a sequence of bytes.