二进制文件
其实所有文件最终都是二进制的
想想我们之前printf()一个整数的时候,实际上是把这个整数格式化了,变成了可以见的形式,就像1,2,3,4,5,6在计算机里不是以1,2,3,4,5,6的形式的,而是二进制存储的,是以四个字节表示这个些1,2,3,4,5,6,而不是六个字节
当我们输入这些数字1,2,3,4,5的时候,实际上输入的是个字符串,这个字符串里面有1,2,3,4,5这个五个字符,那scanf()做的是什么,为什么不叫read,因为它不是直接输入我们输入的值,而是扫描、识别这个字符串,从中识别整数,从而填入那个整数变量里去。
这些输入输出都是都是文本形式的,还有一种二进制的形式,其实也不神秘,从某种意义上说所有文件最终都是二进制的,文本文件也是二进制的,只不过文本文件表现为人可以读的形式而已,文本文件无非可以用简单的形式读写,可以用more、tail、cat等打开文本文件,编辑修改可以用vim等等
而二进制文件需要专门的程序来读写文件
像是.mp3 |.mp4|.jpg等等文件需要专门的工具,你用more打开一个mp3文件是得不到任何有用的东西
文本 VS 二进制
最早的Unix系统喜欢用文本文件来做数据存储和程序配置
只要有more,vi就可以打开我想要打开的文件
交互式终端的出现(在linux之前)使得人们喜欢用文本和计算机“交谈”
我输入命令ls 终端给我显示当前目录下所有文件,这是一种交谈,很显然这交谈是文本显示的,我输入的是文本,它显示给我的也是文本,
Unix的shell提供了一些读写文本的小程序
Windows喜欢用二进制文件
DOS是草根文化,不继承和熟悉Unix文化
Windows是一个完全不同的文化背景,在70年代末-80年代初,,个人计算机是个突破”围墙“的东西革命性的东西,那时候的人还不知道在“围墙”里的linux是怎么样工作的,只是凭借着对计算机硬件的理解,来决定这个计算机的软件该怎么做,pc刚开始的时候能力有限,DOS能力也有限,而用二进制更接近底层。
- 文本的优、劣势
文本的优势是方便人类读写,可以跨平台,在另一个平台也能轻易识别文本
文本的缺点就是程序输入和输出的时候需要经过格式化,这样计算量会变大
- 二进制的优、劣势
二进制的缺点是人类读写困难,刚好和文本相反,全是0和1,压根识别不了,最重要的是不跨平台,int等类型的大小不一样,存储数据方式:大小端的问题
二进制优点就是程序读写快,计算转换量小,(因为它看的懂呀)
程序为什么要文件
- 配置
Unix喜欢把所有的配置文件全部存入文本文件里,然后使用vi可以更改配置。
Windows就不一样,它把所有配置数据写入注册表里,他是一个非常大的二进制文件,计算机上的所有程序数据都在这个里面,使用特定的软件来编辑
- 媒体
这个只能是二进制的,而现实确实,程序通过第三方库来读写文件,很少直接读写二进制文件了
可移植性
这样的二进制文件不具有可移植性
在int为32位的机器上写成的数据文件,无法直接在int为64位的机器上正确读出,因为你本来是4个字节的一个数据,而int为64为机器直接,八个字节一砍,很显然就读错了。
解决的防止一是放弃使用int,而是typedef,具有明确大小的类型更好的方案是使用文本
在互联网里传输数据 为了解决数据类型变化的不同,大小端存储的不同,放弃的运行速度而改用文本、文本就可以很好解决这个问题,人们已经很少利用C语言的底层的文件读取方式来操作数据了,要么使用数据库,要么使用第三方库。
由于作者的能力水平有限,仅表达个人见解,若有纰漏,望指正,一起进步!
本文转自我的个人博客 https://blog.csdn.net/Ustinian_116/article/details/114783972