文本文件和二进制文件
两者并无本质区别,或者说文本文件就是特殊的二进制文件。最主要的区别就是打开文件的程序对内容的解释上。
计算机在物理内存上存储的都是二进制文件,所以二进制文件和文本文件的区别是在逻辑上的而不是物理层面上的。文本文件是基于字符编码(ascii、unicode等)的文件,二进制文件是基于值编码的文件。
二进制文件就是把它在内存中的储存形式原样的输出到磁盘中存放,即存放的是数据的原形式。
文本文件是把数据的终端形式的二进制数据输出到磁盘上存放,即存放的是数据的终端形式
这是个很好的问题,要弄明白二者的区别,需要知道文件的读写过程。
以读文件为例,实际上是磁盘 》》 文件缓冲区》》应用程序内存空间 这两个转化过程。我们说“文本文件和二进制文件没有区别”,实际上针对的是第一个过程;既然没有区别,那么打开方式不同,为何显示内容就不同呢?这个区别实际上是第二个过程造成的。
文件实际上包括两部分,控制信息和内容信息。纯文本文件仅仅是没有控制格式信息罢了;实际上也是一种特殊的二进制文件。所以,我们很难区分二者的不同,因为他们的概念上不是完全互斥的。
我们说文本文件是特殊的二进制文件,是因为文本文件实际上的解释格式已经确定了:ASCII或者unicode编码。文本文件的一个缺点是,它的熵往往较低,也就是说,其实本可以用更小的存储空间记录这些信息。比如,文本文件中的一个数字65536,需要用5个字节来存储;但是用二进制格式,采用int存储,仅仅需要2个字节。而二进制文件elf和bmp等,都往往有一个head,告诉你文件信息和解释方式。
至于“文本文件可以按行操作,即一行一行的操作,而二进制就只能按字节块了”,这个说法则是完全错误的。