我知道文本编辑器无法读取二进制文件,只能由程序读取。 但是当我使用java(字节)创建二进制文件时,我可以打开文件并读取它吗?为什么会这样? 换句话说,我看到一个纯文本而不是一系列零和一个。 我知道在java中有基于字节的流和基于字符的流。当我使用基于字节的流(如FileOutputStream)时,输出是字符而不是字节。
File file = new File("Myfile.dat"); // .txt or .bin
FileOutputStream fos = new FileOutputStream(file);
String data = "Hello, world";
fos.write(data.getBytes());
fos.close();
当我使用记事本打开Myfile.dat时,我希望看到特殊字符或0和1但我可以阅读内容“hello world”。所以我不清楚基于字节的流如何以二进制格式存储字符?
答案 0 :(得分:6)
并不是文本编辑器无法读取“二进制文件”,而是“无法以有意义的方式读取/编辑包含对文本编辑器无用的字符的二进制文件”。毕竟,所有文件都是二进制的:它只取决于它们中包含的内容。
答案 1 :(得分:1)
大多数文本编辑器也可以打开二进制文件,它只取决于二进制值是什么以及编辑器如何将它们解释为文本值。你没有理由不能在记事本或任何简单的文本编辑器中打开Java程序的输出 - 你只会看到乱码和特殊字符!如果您想将内容视为二进制文件,那么您将需要二进制文件编辑器/查看器,例如hexEdit。
答案 2 :(得分:1)
“二进制文件”究竟是什么意思?没有魔术标记将文件标记为“二进制文件”或“文本文件”(至少在目前常用的任何操作系统中都没有)。
文件只是一个带有名称和一些元数据(创建日期,权限等)的字节流。
内容是否可以解释为文本或字节完全取决于内容。
因此,如果仅使用小于128的二进制值编写文件(并避免使用某些低值),则结果是有效的ASCII,并且在文本编辑器中打开时可能看起来(大致)像文本文件。
但是,如果您将随机字节写入文件,则使用文本编辑器打开它不会产生合理的输出。