Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DataOutputStream是否不生成字节作为输出?_Java_File_Io - Fatal编程技术网

Java DataOutputStream是否不生成字节作为输出?

Java DataOutputStream是否不生成字节作为输出?,java,file,io,Java,File,Io,DataOutputStream类用于将基本数据类型写入二进制格式。我一直在使用DataOutputStream类的void writeChars(String s)方法,使用程序将其写入文件中 public class FileDemo { public static void main(String[] args) throws IOException{ String x= "haha"; DataOutputStream out = new Data

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

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现在有以下文本作为输出(所有字符以空格分隔):

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

您是否在寻找writeBytes?
或者您想知道为什么文件不包含类似1010101010的内容吗?

数据输出流正是它的用途。它以字节的形式写入字符。一个字符由两个字节组成

因此,它将字符
haha
写入字节

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

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

如果在中打开文件,它可以显示
0
字节

如果希望将字符转换为已定义编码的字节表示形式,请使用。例如

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

104, 97, 104, 97

是的,正是我所期望的10101010(二进制字符串),您不会看到,因为文本编辑器会将二进制文件转换为可读的字符/字符串。您可以查找一些util方法,如Integer.toBinaryString(10),它将int转换为二进制字符串,然后将其打印到文件中。
104, 97, 104, 97