.Zファイルはcompressを使用して圧縮され、uncompressを使用して解凍できます(または一部のマシンでは、これはuncompress.realと呼ばれます)。この.Zファイルは任意のデータを保持できます。.tar.Zまたは.tazは、compressで圧縮された単なる.tarファイルです。
最初の2バイト(MAGIC_1およびMAGIC_2)は、.Zファイルが実際に.Zファイルであり、誤って同じ拡張子を持つ他のものではないかどうかを確認するために使用されます。これらのバイトはソースにハードコードされています。
3番目のバイトは設定バイトであり、2つの値を保持します。
- 最上位ビットはブロックモードです。
- 最後の5ビットは、コードテーブルの最大サイズを示します(コードテーブルはlzw圧縮に使用されます)。
元のコードから:BLOCK_MODE = 0x80; byte3 =(BIT | BLOCK_MODE); BITは12..16のif/elseブロックにあります。
ブロックモードがオンになっている場合、コードテーブルの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の最初のバイトになります)ファイル)。