writeBytes(str)
中write(str)
与DataOutputStream
之间的区别是什么?
是否有使用它们的提示/技巧?
提前谢谢。
答案 0 :(得分:4)
DataOutputStream属于用于编写二进制数据的OutputStream类 - 不是用于文本的Writer,它是一个旧类,而writeBytes(String)
是一个奇怪的twitter方法,因为它:
字符串中的每个字符按顺序写出 丢弃其高八位。如果没有抛出异常,则为计数器 写入增加s的长度。
因此,从每个Unicode UTF-16字符(16位)中获取低字节。如果字符串限制为7位ASCII,可能是ISO-8859-1,则字符串不会被破坏。但总的来说,信息丢失了。
DataInputStream中没有对应项,没有String readBytes()
。
我称之为设计事故,因为java引入了文本和二进制数据(byte[]
)的分离,引入了byte
并保留了String
和16位{{1}用于Unicode文本。作者可能觉得需要C风格char
。
无需提及writeUTF和DataInputStream.readUTF。
答案 1 :(得分:1)
write()
将byte[]
写入流,而writeBytes()
将yourString.getBytes()
的输出写入流。如果我们需要来自byte[]
我们可以String yourString = new String(yourByteArray);
正如您所看到的String
,我们使用哪种方法很重要,我们可以转换为正确的对象。
但是,如果您想发送二进制数据怎么办?您可能有一个byte[]
或ByteArrayOutputStream
,您可以使用它直接写入数据流。
答案 2 :(得分:-1)
在DataOutputStream
中,参考 oracle文档(http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html),没有任何名为write(String)
的方法,但只有write(byte[])
},write(byte[] b, int off, int len)
和write(int b)
。因此,如果您有String
,则可以使用的最简单方法是writeBytes(String)
。
这些方法没有区别,只根据您的需要使用正确的方法(存储数据的对象类型)。