DataButtesStream中的writeBytes(str)vs write(str)

时间:2015-01-10 18:39:01

标签: java

writeBytes(str)write(str)DataOutputStream之间的区别是什么? 是否有使用它们的提示/技巧? 提前谢谢。

3 个答案:

答案 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)

这些方法没有区别,只根据您的需要使用正确的方法(存储数据的对象类型)。