文本文件和二进制文件

文本文件和二进制文件的定义

  首先,计算机的存储在物理上是二进制的,也就是在物理存储方面没有区别都是 01 码。所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的,也就是编码上。简单来说,文本文件是基于字符编码的文件,常见的编码有 ASCII 编码,UNICODE 编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码

文本文件与二进制文件的存取

  文本工具打开一个文件的过程是怎样的呢?拿记事本来说,它首先读取文件物理上所对应的二进制比特流,然后按照你所选择的解码方式来解释这个流,然后将解释结果显示出来。一般来说,你选取的解码方式会是 ASCII 码形式(ASCII 码的一个字符是8个比特),接下来,它 8 个比特 8 个比特地来解释这个文件流。例如对于这么一个文件流 "01000000_01000001_01000010_01000011"(下划线 ''_'',为了增强可读性手动添加的),第一个 8 比特 ''01000000'' 按 ASCII 码来解码的话,所对应的字符是字符 ''A'',同理其它 3 个 8 比特可分别解码为 ''BCD'',即这个文件流可解释成 “ABCD”,然后记事本就将这个 “ABCD” 显示在屏幕上。
  文本文件格式存储时是将值作为字符然后存入其字符编码的二进制,文本文件用‘字符’作为单位来表示和存储数据,比如对于 1 这个值,文本文件会将其看做字符‘1’然后保存其 ASCII 编码值(这里假定是 ASCII 编码),这样在物理上就是 0x31 这个二进制值,而若是二进制保存 1,则直接保存其二进制值,比如如果程序中是处理 1 为整数则保存的二进制值就是 0x00000001 (4 字节)。
  假如文件存储的编码与读取的编码不同,那么就无法呈现文章原来的信息,例如用记事本打开文本文件会乱码,用音乐播放器无法打开视频文件。

总结

  综上,可以知道文本文件与二进制文件就是编码方式不一样而已,而这个是用户行为,把一个数据以什么样的编码(字符还是值本身)存入文件是由用户主动选择的,也就是写入的接口选择,如果以二进制接口方式写入文件那么就是一个二进制文件,如果以字符方式写入文件就是一个文本文件了。既然有写入时候的编码也就会有读出的编码,只有两个编码对应才能读出正确的结果,如用记事本打开一个二进制文件会呈现乱码的,这里稍微提一下后缀名,后缀名并不能确定其是否就是文本文件,二进制文件也可以是 txt 后缀名,后缀名只是用来关联打开程序,给用户做备注用的,与文件的具体编码没有关系。
  最后文本文件和二进制文件主要是 windows 下的概念,UNIX/Linux 并没有区分这两种文件,他们对所有文件一视同仁,将所有文件都看成二进制文件。