一、文本文件和二进制文件
文本文件:也称为ASCII文件,文件中的每个字节存放一个ASCII码,代表一个字符,这种文件在打开后能够直接看懂其中的内容。
二进制文件:把内存中的数据按照其在内存中的存储形式原样输出到磁盘上存放。这种文件中一般会有很多不可见字符,打开后看到的可能是一堆乱码。(如果本身就是按字符char存储的,一个字节就是一个字符,那只要写入和读取的编码匹配,就都是可见字符。)
内存存储方式:10000如果直接写在了文本文件里,或者在程序里定义了char a[]="10000",10000就相当于字符串,相当于5个字符构成,一个字符占一个字节(8位),所以占5个字节。如果并非直接写在文本文件里,或者是在程序里定义的short int a = 10000,那么计算机将按2个字节读取,计算机内存中都是以字节保存的十六进制数,所以应该先把10000转成十六进制数,因为计算机首先将short int类型的值转换成16进制存入内存,而16^2= 2^8 (二进制有8位) =1个字节,所以16进制下的两位占用1字节内存,内存中一个地址正好是保存1字节数据,也就是27会占1字节,10会占1字节,所以short int类型的10000在内存里以OX 10 27 存储,这种写入内存的方式如果用文本文件打开,通过ASCII码解码时,会因为不可见字符出现乱码(具体看ASCALL码表的二进制、16进制和字符的转换方式)
二进制读取方式:
- 如果在内存中或在文件中保存的实际内容是十六进制的1027(只占2字节),说明是将10000当成一个数字来保存的,这种保存方式比较节省空间。这种保存方式,人类并不需要能够看懂其中的内容,因此,打开这种文件,一般也不会以文本形式打开,而是直接以二进制形式打开(后面会讲解如何打开),然后直接读取其中的数据即可。在程序里读取,需要做到的就是:必须按存入的类型进行解析,比如int占4个字节,就读取4个字节的二进制数,转换成int,之前做过类似的代码!
- 如果以文本形式保存10000 (占5字节,实际保存的十六进制数字是3130303030),说明是将10000当成一个字符串来保存的,这种保存方式相对更耗费空间,但双击打开后人类能看懂。
文本文件的缺点:
- short int a= 10000是一个整型数,在计算机中该数字用short int保存就足矣,short int只占2字节,但是在文本文件中保存却需要5字节,所以这种保存形式占用的存储空间比较大。
- 当双击一个文本文件时,甚至刚才用二进制编辑器打开文本文件时,系统都显示出来了人类能够读懂的文本内容。前面谈过,文本文件或者二进制文件是对于人类来说的,而对于计算机,并不区分是什么类型的文件,保存的都是二进制数据,所以,当用文本形式打开文件时,系统会多做一个工作,就是把二进制数据转换成人类能看懂的ASCII码数据,如图12.5中把如下的3130303030这些二进制数据