分析と広告のためのCookie
分析と広告のためにCookieを使っており、どちらもGoogleに送られます。拒否しても、目に見える動作は何も変わりません。プライバシーポリシーを読む
BZ2 を GZ にする変換は、容量とわずかに引き換えに速さを大きく得ます。bzip2 は最大 900 KB のブロックに対する Burrows-Wheeler 変換で圧縮率を稼ぎますが、それを解くのは本物の計算量を要する処理です。gzip の 32 KB の後方参照はメモリー転送に近い速さで展開できます。結果はわずかに大きく、ずっと速く開くファイルです。
一度に100ファイルまで。フォーマットが混ざっていても構いません。
順番に変換し、まとめてZIPでダウンロードします。
BZ2 から GZ
bzip2 には良い 10 年がありました。おおよそ 1998 年から 2010 年ごろ、gzip では足りないときの当然の答えで、その時期に公開されたものの多くはいまも .tar.bz2 のままです。参照データセット、コーパス、カーネルやソースの tarball、CI が誰も入社する前からずっと毎回ダウンロードしているフィクスチャなど。
アーカイブ自体が問題なのではありません。何かが定期的にそれを展開していて、bzip2 の展開速度がビルドログに見えるほど遅いことが問題です。上流のリリースを作り直す人はいないので、実務的な対応はローカルで速く開く形式に詰め直し、それをキャッシュすることです。これはストレージのために変換する読者とは違い、答えも XZ ではなく gzip になります。
2 つの形式の展開方法は構造的に異なり、この差は実装の質の問題ではありません。gzip の出力はリテラルバイトのコピーと、32 KB の窓の中の過去の繰り返しのコピーで組み立てられます。内側のループは実質メモリー移動で、今のハードウェアはこれが極めて得意です。
bzip2 は最大 900 KB のブロックごとに Burrows-Wheeler 変換を反転しなければなりません。並べ替えられた順列から元の順序を再構築する処理で、ブロック全体にわたる散らばった、キャッシュに不親切な走査を、出力の 1 バイトが確定する前に行い、さらに move-to-front とハフマン層も解きます。これは本物の計算であってデータ移動ではなく、どれだけ調整してもメモリー速度にはなりません。
GZ は大きくなると見込んでください。その差はまったく内容次第です。bzip2 は一度に最大 900 KB の文脈を見るのに対し gzip は 32 KB しか見ないので、文章やログ、CSV、ソースコード、XML では gzip が届かない繰り返しを bzip2 は見つけ、差は本物です。
それ以外の中身では測るほどの差がありません。JPEG や PNG、MP3、MP4、あるいはすでに圧縮されたデータベースファイルの bzip2 アーカイブは、そもそもほとんど圧縮されていません。冗長性はアーカイブ化される前にそれぞれの形式が取り除いているからです。この場合、gzip への詰め直しはほとんど無料で速さの利点をまるごと得られます。
gzip のストリームはヘッダーに元のファイル名を保持します。bzip2 のストリームは名前もパスも手がかりも何も持ちません。この非対称性は普段は些細な話ですが、この変換機で本物の不具合を生みました。
詰め直しは圧縮アーカイブの中の TAR をほどく必要があり、最初のコードはファイル名でそれを判定していました。GZ からなら gzip が `output.tar` という名前を覚えていたのでうまくいきましたが、BZ2 や XZ からは同じ tarball が `input` という名前で届き、判定を通り抜け、結果は 30 個のファイルではなく 1 個の不透明なファイルを含むアーカイブになりました。修正は名前から推測するのではなく tar の種類を強制することで、今日 bzip2 のソースが正しく処理される理由です。
普及率がこの変換のもう半分の論拠で、過小評価されがちです。DEFLATE は HTTP の `Content-Encoding: gzip` の中にも、PNG の中にも、ZIP ファイルの中にも、Git のオブジェクトの中にもあります。主要な言語のほとんどが標準ライブラリに持っています。Python の gzip、Go の compress/gzip、Java の GZIPInputStream、Node の zlib。依存関係を足す必要も、ライセンスを確認する必要もありません。
bzip2 は別途存在しなければならないライブラリで、最小構成のコンテナやロックダウンされた実行環境、ブラウザー、クラウド関数ではしばしば入っていません。gzip は登録された HTTP のコーディング方式ですが bzip2 は一度もそうなったことがないので、あらゆる HTTP クライアントは前者を展開でき、後者は展開できません。
得るものだけでなく失うものも述べておく価値があります。bzip2 は各ブロックを独立して圧縮するので、1 つのブロックの破損がそれ以降すべてを自動的に壊すわけではなく、復旧ツールは壊れたファイルを歩いて無事なブロックを救い出せます。gzip のストリームにはそうした構造がなく、途中でビットが反転すると通常そこでアーカイブは終わります。
これがどれだけ重要かは、ファイルの置き場所次第です。チェックサムを持つ最新のファイルシステムや、返す内容を検証するオブジェクトストレージ、あるいは複製がある場所では、ほとんど問題になりません。かけがえのないものの唯一のコピーを保持する古い単一のディスクでは重要になり得ますが、その場合の正しい答えはどちらの形式でもなく、ファイルごとの整合性データを持つ本物のバックアップです。
アーカイブが読まれるためではなく保管されるためのものなら、gzip は間違った行き先で、XZ が正しい行き先です。同じ中身を bzip2 よりかなりよく圧縮し、それでも展開は bzip2 より速いままです。このページの読者はそちらではありませんが、bzip2 アーカイブを変換している人の多くはそちら側なので、伝えておく価値があります。
判断は単純です。展開頻度を数えてください。頻繁に、機械によって、誰かが待っているステップの中で展開されるなら gzip。稀に、人が、ギガバイト単位で課金されるバケットから展開するなら XZ。bzip2 を残すべき唯一の場面は、メモリーがごく少ない機械です。bzip2 の固定 900 KB ブロックはほとんど何も必要としませんが、XZ は辞書サイズに応じたバッファーを要求します。
あなたの端末ではなく、このサイトのサーバーです。多くの変換はローカルで完結しそう明言していますが、アーカイブの詰め直しはその例外です。7-Zip と gzip を実際のプログラムとして必要とするからです。ファイルは暗号化された接続でそれらを動かすコンテナへ送られ、そのコンテナには外向きのインターネット接続がありません。
ジョブごとにメモリー上の使い捨てディレクトリが割り当てられ、成功しても失敗してもジョブが終われば削除され、60 秒を過ぎると打ち切られます。bzip2 は展開が遅く、文章の大きなアーカイブはまさに時間がかかる入力なので、この制約は現実に効いてきます。無料枠は 1 ファイル 25 MB までで、展開前にアーカイブが申告する展開後の容量を確認し、2 GB を超える申告は拒否されます。
| BZ2 | GZ | |
|---|---|---|
| 正式名称 | Bzip2 アーカイブ | Gzip アーカイブ |
| 拡張子 | .bz2 | .gz, .tgz |
| メディアタイプ | application/x-bzip2 | application/gzip |
| 圧縮方式 | 可逆 — 何も捨てない | 可逆 — 何も捨てない |
| 最初の公開 | 1996 | 1992 |
| 仕様 | — | RFC 1952 |
| ライセンス | オープン標準 | オープン標準 |
| 現在の位置づけ | 旧式、ただし今もどこでも読める | 現行 |
| ブラウザで開けるか | 対応なし | 対応なし |
| 代わりに検討される形式 | XZ | XZ, ZIP |
失われるものはありません。BZ2 も GZ も中身を劣化なしに保持します。この変換が変えるのは包み方であって品質ではないので、劣化が積み重なる心配をせずに何度でも繰り返せます。
BZ2 は 1996 年のもので、今ではほとんど使われていません。GZ は今のプログラムが書き出す形式なので、この変換は「読める状態を保つ」という話でもあります。
7-ZipとKekaは BZ2 と GZ のどちらも読めるので、別のプログラムを開かずに、結果を元のファイルと並べて確かめられます。
GZ が一度に扱う範囲は 32 KB、BZ2 は 900 KB です。繰り返しがこの幅の中に収まっていて初めて、それを圧縮で畳めます。圧縮率の差はそこから来ます。そしてだからこそ、2 つのうち速いのはこちらです。
GZ は 1992 年から使われています。規定は RFC 1952 です。gzip、7-Zip、Kekaがこの形式を読めます。
はい。この変換には、ブラウザーの中では動かないソフトウェアが必要です。ファイルは暗号化されて当方のサーバーへ送られ、処理が終わり次第削除されます。結果のファイルも 60 分後に削除されます。
はい。25 MB までのファイルなら 1 日 100 回まで無料です。この変換だけは当方が費用を負担するサーバーで動くため、ここに上限があります。それ以外に制限はなく、透かしはどの場合も入りません。
いいえ。GZ は同じ内容を何も捨てずに保持できるので、結果は品質の点で元のファイルと同じです。 ファイルは 1 バイトも変わらずに出てきます。失われるのは、容れ物が中身として持っていたものではなく、中身について持っていたもの——パスワードや、形式によっては元のアクセス権と日時です。
失われるものはありません。BZ2 も GZ も中身を劣化なしに保持します。この変換が変えるのは包み方であって品質ではないので、劣化が積み重なる心配をせずに何度でも繰り返せます。