大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异,最终存到磁盘里面的都是0和1组成的。
简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码)。
也就是说对每一个字符,文本文件都会用与之相对应的二进制值存储,反之亦然。例如A对应01000001,1对应00110001。二进制文件则不同,它是将内存中值的编码直接存储。举个例子,比如数值1234,文本文件存储为00110001 00110010 00110011 00110100,而二进制文件则会存储1234的二进制值00000100 01101010(假设以short类型)。
差别也就在这里,文本文件把所有东西都视为“字符”对待,编码确定了,每个字符对应的二进制也就确定了;二进制文件则会根据值的不同而改变,比如上面的1234,假如改为int类型,那就是00000000 00000000 00000100 01101010了,因为int类型占据四个字节。
另外,文本方式写时,每遇到一个''\n''(0AH换行符),它将其换成''\r \n''(0D0AH,回车换行),然后再写入文件;当文本读取时,它每遇到一个''\r\n''将其反变化为''\n'',然后送到读缓冲区.二进制读写时,其不存在任何转换,直接将写缓冲区中数据写入文件。