ISO 9660 是 1988 年发布的文件系统标准,适用于光盘介质。它由国际标准化组织 (ISO) 和国际电工委员会 (IEC) 开发,用于为 CD-ROM 定义标准文件系统。其目标是确保不同平台和操作系统之间的数据光盘 的互操作性。
ISO 9660 光盘包含数据,采用与其他文件系统类似的目录和文件分层树结构。最顶层的目录称为根目录。目录和文件使用从根目录开始的路径进行引用。每个目录(包括根目录)都包含一组目录项,这些目录项提供有关文件和子目录的元数据。
ISO 9660 定义了文件系统结构的几个关键方面和限制:
- 文件名最长可达 8 个字符,扩展名为 3 个字符,用点分隔。文件名必须由大写字母 A-Z、数字 0-9 和下划线组成。文件名长度和字符限制有助于确保广泛的兼容性。
- 目录名同样限制为 8 个大写字符加上下划线。目录名的深度也限制为 8 级。
- 任何文件或目录的完整路径长度限制为 255 个字符。路径分隔符使用正斜杠 (/)。
ISO 9660 光盘以 16 个扇区的系统区域开头,后面最多有 2048 个扇区的卷描述符。卷描述符提供有关光盘结构和内容的信息,包括包含关键元数据的初级卷描述符。
初级卷描述符出现在扇区 16,并包含信息,例如光盘卷名、发布者标识符、数据准备者、版权、摘要以及卷创建/修改/到期日期。它还指定路径表大小和位置、根目录位置以及对补充卷描述符的引用。
ISO 9660 光盘使用路径表来优化目录导航和查找。路径表提供目录层次结构的索引,其中使用小写名称的目录有单独的表(类型 L 路径表),而使用大写和特殊字符名称的目录有单独的表(类型 M 路径表)。类型 L 路径表是可选的,但大多数光盘都使用它。
每个路径表项都包含目录记录的位置、从根目录到目录的级别数以及目录的名称。这允许高效地遍历目录树,而无需逐个扇区地解析目录。
ISO 9660 光盘上的文件和目录通过每个目录中的目录记录项进行引用。目录记录包括以下元数据字段:
- 目录记录的 长度 - 扩展属性记录长度 - 文件/目录范围(扇区偏移)的位置 - 文件/目录的数据长度 - 记录日期和时间 - 文件标志(例如:隐藏、目录、关联文件) - 交错文件的单位大小 - 交错文件的间隔大小 - 卷序列号 - 文件标识符(文件名)的长度 - 文件名
ISO 9660 定义了一个虚拟文件系统,其中所有数据都掌握在只读介质上。因此,该标准不包括修改现有 ISO 9660 光盘的规定 - 光盘始终被视为只读。如果需要更改,则必须使用更新的文件和目录生成新的光盘映像。
虽然 ISO 9660 是为光盘介质设计的,但也可以从其他介质(如硬盘驱动器)访问使用该标准的光盘映像。许多操作系统允许将 ISO 9660 光盘映像文件挂载为虚拟只读驱动器,或通过特殊文件系统驱动程序访问光盘映像内容。
对 ISO 9660 的后续扩展扩展了其功能,同时保持了向后兼容性:
- Rock Ridge 扩展:允许将 Unix 文件系统语义和信息存储在 ISO 9660 光盘上。支持更长的文件名、更深的目录结构和附加的文件属性。
- Joliet 扩展:由 Microsoft 指定,允许 Unicode 文件名最长为 64 个字符。Joliet 文件名可以使用更广泛的字符,并以 UTF-16 格式存储。
- El Torito:通过为可引导 CD-ROM 提供规范,使光盘可引导,其中可以包括引导代码和可引导磁盘映像。
尽管与鼎盛时期相比,光盘的普及程度有所下降,但 ISO 9660 仍然是只读介质上数据交换的重要标准。它的设计在光存储的限制下促进了跨计算平台的互操作性。了解 ISO 9660 格式对于使用 CD/DVD 存档、光盘映像和操作系统内部的人员来说非常有价值。
文件压缩通过减少冗余,让相同的信息占用更少的比特。可压缩的上限受信息论约束:对于无损压缩,上界是 信源熵(参见香农的信源编码定理及其 1948 年的原始论文《通信的数学理论》)。对于有损压缩,码率与感知质量之间的权衡由率失真理论描述。
大多数压缩器分两步。首先,模型预测或揭示数据中的结构。然后,编码器把这些预测变成近乎最优的比特模式。一个经典的建模家族是 Lempel–Ziv:LZ77 (1977)和 LZ78 (1978) 会检测重复子串并输出引用而不是原始字节。在编码端,霍夫曼编码(见原始论文1952)会为更常见的符号分配更短的代码。算术编码和范围编码能更贴近熵极限,而现代的非对称数值系统(ANS)用查表实现获得相似的压缩率。
DEFLATE(被 gzip、zlib 与 ZIP 采用)结合了 LZ77 和霍夫曼编码。其规范完全公开:DEFLATERFC 1951、zlib 封装RFC 1950以及 gzip 文件格式RFC 1952。Gzip 面向流式传输并明确不提供随机访问。PNG 图像标准化将 DEFLATE 作为唯一的压缩方法(窗口最多 32 KiB),可见 PNG 规范“Compression method 0… deflate/inflate… at most 32768 bytes”和W3C/ISO PNG 第二版。
Zstandard (zstd): 面向高压缩率与快速解压的通用压缩器。格式记录在RFC 8878(还有HTML 镜像)以及 GitHub 上的参考规范文档。与 gzip 类似,基本帧不追求随机访问。zstd 的拿手好戏是字典:从语料中抽取的小样本能显著改善大量小文件或相似文件的压缩(参见python-zstandard 字典文档与Nigel Tao 的 示例)。各实现同时支持“无结构”和“有结构”字典(讨论)。
Brotli: 为网页内容(例如 WOFF2 字体、HTTP)优化,混合静态字典与类似 DEFLATE 的 LZ+熵编码核心。规范见RFC 7932,其中也指出滑动窗口大小为 2WBITS-16,WBITS 取值 [10, 24](1 KiB-16 B 到 16 MiB-16 B),并且不尝试随机访问。Brotli 常在网页文本上优于 gzip,同时保持快速解码。
ZIP 容器: ZIP 是一种文件归档格式,可存储使用多种压缩算法(deflate、store、zstd 等)的条目。事实标准是 PKWARE 的 APPNOTE(参见APPNOTE 门户、托管副本以及美国国会图书馆的概览ZIP File Format (PKWARE)/ZIP 6.3.3)。
文件压缩是一种减小文件或文件集大小的过程,通常用于节省存储空间或加速网络传输。
文件压缩通过识别和删除数据中的冗余来工作。它使用算法在更小的空间中编码原始数据。
文件压缩的两种主要类型是无损压缩和有损压缩。无损压缩允许完美恢复原始文件,而有损压缩则以损失部分数据质量为代价,实现更大的大小减小。
文件压缩工具的一个流行例子是WinZip,它支持包括ZIP和RAR在内的多种压缩格式。
对于无损压缩,质量保持不变。然而,对于有损压缩,由于它消除了较不重要的数据以更大程度地减小文件大小,因此可能会有明显的质量下降。
是的,就数据完整性而言,文件压缩是安全的,尤其是无损压缩。然而,像任何文件一样,压缩的文件可能会被恶意软件或病毒攻击,因此总是必要的有安装可靠的安全软件。
几乎所有类型的文件都可以被压缩,包括文本文件、图像、音频、视频和软件文件。然而,可达到的压缩水平可以在文件类型之间大大变化。
ZIP文件是一种使用无损压缩来减小一个或多个文件大小的文件格式。ZIP文件中的多个文件有效地被捆绑在一起成为一个单一的文件,这也使得分享变得更容易。
技术上,是的,尽管额外的减小大小可能是微不足道的甚至适得其反。压缩一个已经压缩的文件有时可能会增加它的大小,由于压缩算法添加的元数据。
要解压文件,你通常需要一个解压或解压缩工具,如WinZip或7-Zip。这些工具可以从压缩格式提取原始文件。