ブロック上限 511 MiB、並列化がほぼ無料になる BZip3
要約
BZip3 は文章とソースコードに向けた可逆圧縮の道具で、ブロックの上限を 1 MiB から 511 MiB まで広げ、前処理にレンペル・ジフの予測を足し、エントロピー符号を文脈混合に替え、六つのコマンド行の道具を添える。
おすすめ- ソフト名
- BZip3
- バージョン
- 1.5.4
- 料金
- 無料
- オープンソース
- オープンソース
- OS
- WindowsmacOSLinux
- 更新日時
- 2026-10-17 16:04
ブロック整列を使う圧縮の仕組みは、三十年のあいだほとんど動かなかった。一つのブロックは数百キロバイトで止まり、一回の処理は一つの流れだけで走り、符号の長さはバイト単位に縛られていた。BZip3 はそこをまとめて開いた。ブロックの上限は 511 MiB まで広がり、処理の流れは丸ごと入れ替わり、並列化はほとんど無料で付いてくる。
まずブロックの境目を緩める
可逆圧縮の取引は昔から表に出ている。より小さく収めるには、たいてい時間と記憶領域を差し出すことになる。BZip3 は文章とソースコードに向けたコマンド行の圧縮の道具で、C で書かれた圧縮の庫も一緒に付く。最初のつまみは、一度にどこまで見られるかだ。ブロックの大きさは 1 MiB から 511 MiB まで動かせ、既定は 16 MiB。ブロックが大きいほど遠く離れた繰り返しを捕まえやすくなり、圧縮率もそれに従う。代価は公式の文書に書かれている。圧縮も展開も、ブロックの大きさのおよそ六倍の記憶領域を使う。しかも展開に必要な量は、圧縮したその瞬間にブロックの大きさで決まってしまうので、つまみを回す前に相手の機械が耐えるかを見ておく必要がある。
三つの段を積んだ流れ
流れは三つの段に分かれる。入口は前処理で、連長符号とレンペル・ジフの予測がそれぞれ一度通る。前者は続けて重なるバイトを片づけ、後者は LZ77 の形の照合で遠くの同じ断片を見つけ、さらに PPM の形の文脈の見立てで次のバイトの取りうる値を推し量る。これを変換の前に済ませて長い繰り返しを剥がすので、素材が冗長なほど効き目が大きい。中ほどはブロック整列の変換で、接尾辞配列の構築によって成り立ち、似た文脈を隣り合う位置に集める。おかげで後ろに控える単純な低次の予測器も、高次の統計を味わえる。出口はエントロピー符号で、算術符号に零次の文脈混合を組み合わせ、文脈ごとに複数の確率の見積もりを混ぜる。バイト単位の符号の長さが生んでいた損は、これで消える。

ブロックの上限は、この三段のあいだで釣り合いを取る点になる。同じ資料を違う上限で通すと、圧縮率はかなり変わる。公式の勧めは、記憶領域が許す上限までブロックを上げることだ。展開の速さはブロックの大きさにほとんど左右されないからである。
記憶領域と並列を利用者に委ねる
ブロックどうしは互いに依存しないので、並列化は本当にほとんど無料で手に入る。コマンド行は作業者の数を一つ受け取り、作業者ごとに一つのブロックを任せる。既定は一つだけで、上限は 64 まで。夜間の控えの手順で四つから八つ動かせば、圧縮の時間は何倍も縮む。完全性でも手を抜かない。どのブロックにも CRC32 の照合値が付き、展開のときに結果をバイト単位で突き合わせる。形式の固定の負担は、ファイルごとに 9 バイト、ブロックごとに 9 から 17 バイト。公式はさらに、乱れた資料の膨らみはふつう 0.8 パーセント未満に収まると記しており、圧せない資料でもファイルが大きく膨れることはない。
公式の比較にある数字
開発元は比較の一覧を公開しており、性質の異なる資料を通している。目を引くのは圧縮後の大きさを元の大きさで割った比だ。同梱のソースの束は 501,760 バイトから 72,320 バイトへ、およそ七分の一になる。長い中国語の文章はおよそ六分の一。音声の資料はおよそ三分の一までしか縮まず、仮想機械のディスクの像に至っては半分で止まる。万能ではないということでもあり、開発元は位置づけを明快に書いている。文章とソースコードにことのほか強い、と。
資料 | 元の大きさ | 圧縮後 | 割合 |
|---|---|---|---|
同梱のソースの束 | 501,760 バイト | 72,320 バイト | 14.4% |
長い中国語の文章 | 79,912,971 バイト | 12,753,530 バイト | 16.0% |
英語の戯曲の全文 | 5,458,199 バイト | 1,229,840 バイト | 22.5% |
混合の資料 Silesia | 211,968,000 バイト | 47,227,855 バイト | 22.3% |
混合の資料 Calgary | 3,265,536 バイト | 807,959 バイト | 24.7% |
音声の資料 | 115,742,720 バイト | 41,187,299 バイト | 35.6% |
仮想機械のディスクの像 | 804,192,256 バイト | 406,343,457 バイト | 50.5% |

許諾、対応する環境、添えられる命令
許諾は LGPLv3 で、実行時のコードの著作権は Kamila Szewczyk にある。実行時の庫には Apache 2.0 と BSD の二条項の部分も同梱され、構築の手順は GPL の三条項に Autoconf の例外を添えたもの。開発元は全体を LGPLv3 の単一の許諾で出し、二重の許諾はしないと説明している。対応する環境は思ったより広い。x86、x86_64、armv6、armv7、aarch64、ppc64le、mips、mips64、sparc、s390x の十種で試されており、公開される資産には Windows の 32 ビットと 64 ビットの実行ファイル、加えて 64 ビットの Linux の実行ファイルが入る。macOS では包みの管理の道具から取れる。コマンド行の選択肢は伝統的な Unix の圧縮の道具に似せてある。既定の動きは圧縮で、-b がブロックの大きさ、-j が作業者の数、-d が展開、-t が照合だけ、-B がまとめての処理になる。ソースの束には六つの添えの命令も入る。bunzip3 は展開の担当、bz3cat は中身を標準の出力へ出し、bz3grep は圧縮した束のまま文章を探し、bz3less と bz3more と bz3most は展開した結果をページ送りの道具へ渡す。現在の版 1.5.4 は 2026 年 9 月 7 日に出ており、倉庫は 2022 年 5 月から更新が続いている。
BZip3 は圧縮率で奇跡を起こすつもりはない。長く我慢してきた幾つかの制限をまとめて緩めたのだ。ブロックは 511 MiB まで広がり、前処理に予測が一つ加わり、エントロピー符号は文脈混合に変わり、並列は利用者が自分で決める。向く状況もはっきりしている。ソースコード、記録、長い文章のような、繰り返しが多く、一字も落とせないものだ。