.Z 文件使用 compress 压缩,并且可以使用 uncompress 解压缩(或者在某些机器上,这称为 uncompress.real)。这个 .Z 文件可以保存任何数据。.tar.Z 或 .taz 只是一个用 compress 压缩的 .tar 文件。
前 2 个字节(MAGIC_1 和 MAGIC_2)用于检查 .Z 文件是否真的是 .Z 文件,而不是意外具有相同扩展名的其他文件。这些字节在源代码中是硬编码的。
第三个字节是设置字节,包含 2 个值:
- 最高有效位是块模式。
- 最后5位表示码表的最大尺寸(码表用于lzw压缩)。
从原始代码:BLOCK_MODE=0x80; byte3=(位|块模式); 并且 BIT 在 if/else 块中,它是 12..16。
如果打开了块模式,则在代码表中的第 256 位将添加一个实体(请记住 0..255 用值 0..255 填充),这将包含 CLEAR 符号。因此,每当从文件的数据流中获取 CLEAR 符号时,必须将代码表恢复为其初始状态(因此它只有 0..256)。
最大代码大小表示代码表可以包含的位数。当达到最大值时,不再有实体添加到代码表中。所以如果最大码长为0b00001100,则表示码表只能容纳12位,所以最多2^12=4096个实体。
compress 可能使用的最大数量是 16 位。这意味着此设置字段中有 2 位未使用。
在这 3 个字节之后,原始 LZW 数据开始。因为 LZW 表从 9 位开始,第 4 个字节将与输入的第一个字节相同(如果是 .tar.Z 文件或 taz 文件,此字节将是未压缩 .tar 的第一个字节文件)。