Skip to content

【科普文】有关文件格式

2013年11月26日

题图

这篇文章是在知乎回答的一个问题“为什么计算机需要各种各样的格式?能否有一种通用的格式来替代它们?”觉得挺有意思的,可以引起一些在信息架构方面的思考。如果有一天机器有了智能,那么也许我们的格式真的都不再需要了。

首先,格式肯定不是伴随计算机而生的,它并不特指文件格式,而是指一种“规格”“规范”“约定”之类的东西。比如你写合同,最少要有合同正文和甲乙双方签字,这个就是合同的格式;比如你去银行办业务,要填表单,这个就是银行需要的格式;再比如你要写一首古诗,每句要换个行,这也是格式。这些都跟计算机无关,格式是普遍存在的。

其次,格式存在的意义是什么?如上面的所有东西,都可以归为“文档”,或者更通用一些,叫“文本”。理论上,你也可以不需要任何格式,合同就从头到尾,把约定的事情讲清楚就行,去银行也写一段文字,上面交代清楚自己的资料,写诗就从头写到尾一大段,也行。没有格式,这些事情也可以做,那为什么还需要格式?因为有了格式,效率可以更高,比如你一看合同,就知道我该重点看条款,应该在结尾签名,一看银行表单就知道我应该在这栏填姓名,这栏填身份证号,一看分四行每行七字就知道这大概是一首诗了。格式的意义在于规范,让不同的东西有自己的规范,以便更好地书写、检验、读取,比如如果没有银行表单,你可能怎么也不知道要写证件号码,可能写了也不知道还要写发证机关,而有了这个表单(格式)之后,一切都变得好办了,你好写,工作人员也好检查填得对不对,也方便它录入电脑办理后续手续。

回到计算机中的文件格式,和上面的格式是一样的,因为文件有不同的用途,约定自己的格式有助于更好地写入、检验和读取。比如你要生成一个文本文件,那按照文本文件的格式,直接ASCII编码,将编码写入磁盘就OK,比如要生成一个BPM文件,那按照BMP的格式,分四个部分,先写BM,再写文件的元数据,再写颜色表,再写图像数据。这样其它软件读取的时候,一看.txt就知道直接ASCII解码,当文本显示就行了,一个.bmp就知道分四个部分读,读完计算出像素值再显示出来。其它格式都依此类推,有了这些格式,生成软件和读取软件可以更好地处理不同类型的文件。

最后,计算机能否有一种通用格式呢?其实这个问题其实不能用“能”或者“不能”来回答。计算机的文件格式是可以分层的,比如最底层,大家都是二进制,0101而已,没区别,全都是一样的格式,这正是这些不同格式的文件可以被放在同一个磁盘上的原因。在这之上是文件系统的格式,文件系统可以将这些0101以不同的策略来分布在物理磁盘上,也可以没事自己做做压缩、搬迁神马的。再之上是这些二进制数据0101的含义,同样的一段数据,可能在作为文本的时候表示“1”,但在作为图像的一部分的时候表示“一个黑色的点”。所以在“含义”这一层,不同用途的文件是一定会有不同的格式的,即便它们用了什么火星来的技术,使用相同的物理格式来保存,最后也一定在逻辑含义上有区分,而这些区分具体到我们日常理解的逻辑,便成了不同的文件格式。

P.S.1: 在上面例子中,人与人之间交互可以使用不分格式的“文本”来做,是因为人具有自然语言书写和理解的能力,比如你写“我的身份证号是xxx”,或者写“身份证xxx”,别人都可以理解,但计算机不能,所以计算机必须通过严格约定的格式来区分不同格式,在逻辑上不存在通用格式。

P.S.2: 将一个文件用base64编码,便得到一段上面说的“火星技术”类似的东西,即不管什么文件看起来都是一样的格式,但一旦被使用,仍然需要base64解码,变成不同的文件格式。追求这样一种看起来通用的格式,并没有什么正面意义,反而增加运算量和人的识别难度。