01不同文件里面真的不一样吗?

是的。 虽然文件最后都由 Byte 组成, 但不同文件会按照不同的格式规则组织这些 Byte。

JPEG 图片

记录图像、压缩参数和其他信息

MP3 音频

保存经过音频编码后的声音数据

TXT 文本

主要保存字符编码后的文本数据

ZIP 压缩包

按压缩格式保存多个文件或目录数据

02软件为什么必须“懂格式”?

假设一串 Byte 是 JPEG 图片数据。 图片查看器知道 JPEG 的格式规则, 所以能找到图像信息并把它解码成像素。

但如果把同一串 Byte 交给只会处理普通文本的软件, 它并不知道这些 Byte 应该怎样解释成图片。

文件数据

FF D8 FF E0 ...

懂 JPEG 的软件

按照 JPEG 规则解码

显示图片

03打开文件时,软件做了什么?

软件“打开”一个文件, 通常不是简单地把文件原样显示出来。

它往往要经历几个步骤:

1

读取文件

从存储设备把需要的数据读入内存

2

识别格式

确认文件采用哪种数据结构

3

解析或解码

把文件里的 Byte 还原成程序能使用的数据

4

显示或使用

把图片画出来、声音播放出来或文字显示出来

04操作系统怎么知道该用哪个软件?

操作系统通常会保存一套文件关联(File Association)

它会把某些文件扩展名或文件类型, 和默认打开它的软件联系起来。

.jpg 文件扩展名

系统查询文件关联

图片查看器

所以你双击文件时, 系统通常会自动启动默认程序。

05一个文件只能用一个软件打开吗?

当然不是。

同一种格式,只要多个软件都实现了对应格式的读取能力, 就都可能打开它。

photo.jpg

图片查看器

主要用来看

图片编辑器

可以修改图片

浏览器

也能显示很多图片格式

06用错软件打开会发生什么?

可能出现几种情况。

直接拒绝

软件发现自己不支持这种格式

显示乱码或奇怪内容

软件把 Byte 按错误规则解释

只能打开一部分

软件只支持格式中的部分功能

把二进制图片当普通文本打开: ÿØÿà..JFIF...�...

07改后缀能让别的软件打开吗?

改后缀有时会让操作系统换一个默认软件尝试打开, 但它不会改变文件内部格式

photo.jpg 内部:JPEG 数据
photo.txt 内部:仍然是 JPEG 数据

文本编辑器可能因此被系统选中, 但它看到的仍然是 JPEG 的二进制数据, 并不会自动把图片变成文字。

08为什么同一种格式,有的软件也打不开?

因为“支持某种格式”也可能有范围。

同一种文件格式可能有不同版本、编码方式、压缩方式或可选功能。 老软件不一定认识后来新增的功能。

格式版本

新版本可能增加旧软件不认识的功能

编码 / 压缩方式

软件可能只支持其中一部分

可选特性

某些高级功能需要额外支持

文件损坏

如果关键结构损坏,支持格式的软件也可能打不开

你已经知道了什么

  • 不同文件格式会用不同规则组织 Byte,所以软件必须理解对应格式才能正确读取。
  • 打开文件时,软件通常需要读取数据、识别格式、解析或解码,再把结果显示或使用。
  • 操作系统会通过文件关联选择默认软件,但默认软件并不是唯一可以打开这个文件的软件。
  • 只要多个软件都支持同一种格式,它们就都可能打开同一个文件。
  • 用错误的软件打开文件,可能会被拒绝,也可能看到乱码或不完整内容。
  • 改文件后缀只会改变文件名,不能改变文件内部真实格式。
  • 真正转换格式,需要软件读取原文件,再按照新格式重新编码和保存。
  • 同一种扩展名内部也可能使用不同版本、编码器或可选功能,因此不是所有软件都一定完全兼容。

下一个问题: 文件、文件夹、软件、程序、安装和打开文件, 我们已经分别学过了。 它们在一台真正的电脑里到底是怎样串起来工作的? 下一篇:从文件到程序:电脑世界大串联