先说重点,决定文件类型不是文件名后缀,而且文件头。

在学习操作系统的过程中,文件管理中按照不同的属性将文件分文很多类型,其中按照文件结构可以将文件分为无结构文件和结构文件,其实在没学习操作系统之前,我以为文件后缀决定了文件类型,因为经常新建txt,改后缀。所以当时我就有很多疑问,我寻思不是有很多类型吗,txt,jpg什么的。另外在学习各种编程语言的打开文件操作,其中有一个以二进制形式打开,我也有很多疑问,所有文件在硬盘上不都是二进制存储吗?

实习的时候,研究了Linux ELF文件结构,仔细阅读文件头格式,突然领悟到,其实所有的文件都是二进制,这一串能够存储什么信息,取决应用程序怎么解释这串二进制。可以8位二进制一组,每组代表带遍一个字符,但是为了统一,所以有ascii码表,但是能够带遍的范围有限,其他国家的语言那么多,所有各个国家都有各个国家的编码,世界为了统一也有utf-8之类的。这确实一种解释方式,这种解释方式简单,因为就是单纯从第一位开始,多少个二进制一组,每一组代表一个字符,从头到位一直解释就行,所以这种叫纯文本文件,没有任何结构。但是其他类型的文件呢?

其他类型的文件,并不一定想纯文本文件这样很有规律有特点,假设让你用二进制去存储一副图像,假设是黑白照片,当然你可以把他的像素信息从左到右,从上到下直接存储为一串二进制。但是这样有什么问题吗?问题就是只能你自己再次打开的时候,你知道你是这么存的,所以打开就读。但是如果别人想打开,你就得告诉他的你的存储规则,其实这种就是一种协议,另外,是不是还需要一些辅助信息,比如图片的长和宽像素个数。这些信息你都需要告诉其他人,所以其实可以把这些信息存在文件开头的位置,比如规定文件前2个字节指示了图片长的像素个数,接下来两个字节表示宽度,其他字节代表其他属性信息,完了之后就开始存储像素信息,就可以现实图片了,当然只是简单举例子,实际情况还设计很多压缩算法。至于为什么是放文件头,因为数据区有大有小,不读配置信息无法确定什么时候数据信息完,配置信息从何处开始。

各种软件的源文件格式,都按照一定的结构存储。而且都是放在文件头开始。文件后缀名只是window为了方便用户,打开文件可以默认选择一个应用程序打开文件,否则你每打开一个软件都要选择打开方式,从上面也可以看出来任何文件都是二进制,所以都可以以文本文件形式打开,虽然没有意义,但是至少可以解释。所以才会看起开很奇怪