PK0708ヘッダ
まずはZipHeader.optionの3ビット目をオンにすることで、「PK0304ヘッダにはCRC32値やファイルサイズは置いていない」ことを宣言します。なお、この宣言が行われると、PK0304ヘッダ内にある「crc32」「compsize」「uncompsize」は無視されるようになるため、それぞれの値は0のままにしておきます。
これら3つの値は、CRC32や圧縮後のサイズが算出済みとなる圧縮データの直後でのPK0708ヘッダに書き込みます。

struct ArchiveDataHeader1
{
unsigned int signature; // 0x08074B50を代入
unsigned int crc32;
unsigned int compsize;
unsigned int uncompsize;
};
struct ArchiveDataHeader2
{
unsigned int crc32;
unsigned int compsize;
unsigned int uncompsize;
};
ヘッダにはsignatureの有るバージョンと無いバージョンがありますが、本来の仕様としては署名(PK0708)なしを用います。一方で、zipファイルヘッダの互換性を維持するため、PK0708をヘッダの最初に付け加えたものを出力するアーカイバも存在します。
この「アーカイブデータ後出し宣言」方法は、シーケンシャルアクセスで書き込みたいときはもちろん、seekによる移動量の計算が面倒くさいときに使うのもよいでしょう。