我知道二进制文件不能被文本编辑器读取,只能被程序读取。但是当我使用java(字节)创建二进制文件时,我可以打开文件并读取它吗?为什么会发生这种情况?换句话说,我看到的是纯文本,而不是一系列0和1。我知道在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“。所以我不理解基于字节的流是如何以二进制格式存储字符的?
发布于 2011-09-26 21:02:27
这并不是说“二进制文件”不能被文本编辑器读取,而是“包含对文本编辑器无用的字符的二进制文件不能以有意义的方式读取/编辑”。毕竟,所有的文件都是二进制的:这只取决于其中包含的内容。
发布于 2011-09-26 21:02:33
大多数文本编辑器也可以打开二进制文件,这取决于二进制值是什么以及编辑器如何将它们解释为文本值。您没有理由不能在记事本或任何简单的文本编辑器中打开Java程序的输出-您只会看到乱七八糟的字符和特殊字符!如果您想以二进制格式查看内容,则需要一个二进制文件编辑器/查看器,如hexEdit。
发布于 2011-09-26 21:03:38
你说的“二进制文件”到底是什么意思?没有魔术标签可以将文件标记为“二进制文件”或“文本文件”(至少在目前常用的任何操作系统中不是这样)。
文件只是一个带有名称和一些元数据(创建日期、权限等)的字节流。依附的。
内容是否可以解释为文本或字节完全取决于内容。
因此,如果您只使用小于128的二进制值编写文件(并且避免使用一些较低的值),则结果是有效的ASCII,并且在文本编辑器中打开时可能(大致)看起来像一个文本文件。
但是,如果您将随机字节写入文件,则使用文本编辑器打开该文件将不会产生正常的输出。
https://stackoverflow.com/questions/7555444
复制相似问题