DataOutputStream不生成字节作为输出?

时间:2014-10-07 10:01:34

标签: java file io

DataOutputStream类用于将原始数据类型写为二进制格式。我一直在使用void writeChars(String s)类的DataOutputStream方法,使用该程序将其写入文件...

public class FileDemo {
    public static void main(String[] args) throws IOException{
        String x= "haha";
        DataOutputStream out = new DataOutputStream(new FileOutputStream("E:/a.txt"));
        out.writeChars(x);
        out.close();
    }
}

文件a.txt现在有以下文本作为输出(所有字符用空格分隔):

 h a h a

我的问题是为什么文件没有字符串作为字节? 并且还请解释为什么当我们可以使用DataOutputStream的函数来编写所有原语时需要使用PrintWriter ...

2 个答案:

答案 0 :(得分:1)

DataOutputStream完全符合它的目的。它将字符写为字节。一个char由两个字节组成。

因此它将字符haha写为字节

0, 104, 0, 97, 0, 104, 0 ,97

因为char h表示为两个字节0, 104

在文本编辑器中打开文件时,它会尝试根据指定的编码解释字节。例如,记事本默认使用ANSI。

如果您在Notepadd++中打开文件,它会显示0个字节。

enter image description here

如果希望将char转换为已定义编码的字节表示,请使用OutputStreamWriter。 E.g。

OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(
            "C:/Dev/a.txt"), Charset.forName("windows-1252"));
out.write(x);
out.close();

这将输出字节

104, 97, 104, 97

答案 1 :(得分:0)

您在寻找writeBytes吗? 或者你想知道为什么文件不包含像1010101010这样的东西?