NEWCは、ファイルとディレクトリの集合を効率的に格納および圧縮するように設計されたファイルアーカイブ形式です。これは、ZIPやARJなどの既存のアーカイブ形式を改良したものとして、1993年にEugene Roshalによって開発されました。この形式は、より高い圧縮率、より高速な解凍速度、データの回復とアーカイブ管理のための強化された機能を提供することを目的としています。
NEWC形式は、本質的に、メインヘッダーの後に一連のファイルヘッダーと圧縮されたファイルデータが続きます。メインヘッダーには、NEWCシグネチャ、バージョン番号、合計サイズ、ファイル数などのアーカイブに関するメタデータが含まれています。各ファイルヘッダーには、ファイル名、属性、タイムスタンプ、CRC32チェックサム、圧縮サイズ、非圧縮サイズなどの情報が含まれています。
NEWCは、ファイルが連結され、単一の連続データストリームとして圧縮されるソリッドアーカイブ構造を採用しています。このアプローチにより、複数のファイルにまたがる冗長性を活用することで、より高い圧縮率を実現できます。ただし、単一のファイルを抽出するには、その時点までのアーカイブ全体を解凍する必要があり、ZIPなどの非ソリッド形式から抽出するよりも遅くなる可能性があります。
NEWCで使用される圧縮アルゴリズムは、Eugene Roshal独自のインプリメンテーションに基づいており、Lempel-Ziv-Storer-Szymanski(LZSS)圧縮と、部分一致による予測(PPM)を使用した統計モデリングを組み合わせています。LZSSは、繰り返しのシーケンスを以前の出現への参照に置き換える辞書ベース のアルゴリズムです。PPMは、入力データのモデルを構築して、今後のシンボルに関する確率的予測を行い、より効率的なエントロピー符号化を可能にします。
NEWCの重要な機能の1つは、リカバリレコードのサポートです。これらは、アーカイブの構造と内容に関する情報を格納する、圧縮データと交互に挿入される特別なエントリです。ファイルが破損した場合、リカバリレコードを使用してアーカイブの破損した部分を再構築し、無傷のファイルを救出できます。この形式には、メインヘッダーとファイルヘッダーの冗長性も含まれており、データ損失に対する耐性が向上しています。
NEWCは、アーカイブを複数のボリュームに分割するためのいくつかの方法を提供します。これは、大規模なアーカイブを複数のディスクに格納したり、サイズ制限のあるネットワーク経由で送信したりする場合に役立ちます。この形式は、指定されたサイズのボリュームの作成と、ファイルのリストをボリュームマーカーとして使用することをサポートしています。また、マルチボリュームアーカイブの整合性チェックとリカバリのためのメカニズムも含まれています。
アーカイブ管理の観点から、NEWCはさまざまな機能を提供します。既存のアーカイブ内のファイルの追加、削除、更新をサポートしています。ファイルコメントは、追加のメタデータを格納するために個々のエントリに関連付けることができます。この形式では、CBCモードでAESアルゴリズムを使用したアーカイブの暗号化とパスワード保護も可能です。
NEWCは、高い圧縮率と高速な解凍速度により人気が高まっています。ソフトウェア、ファーム ウェアの更新、データのバックアップの配布に広く使用されています。この形式は、WinRAR、7-Zip、PowerArchiverなどのさまざまなアプリケーションやユーティリティで採用されています。
NEWCは多くの利点がありますが、いくつかの制限もあります。ソリッドアーカイブ構造により、非ソリッド形式と比較してランダムアクセスと部分抽出が遅くなる可能性があります。単一の圧縮アルゴリズムに依存しているため、すべてのタイプのデータに常に最良の結果が得られるとは限りません。さらに、この形式の複雑さと独自の性質により、一部のコンテキストでの採用が妨げられています。
これらの課題にもかかわらず、NEWCは依然として重要で広く使用されているアーカイブ形式です。その効率性、堅牢性、機能セットにより、データ圧縮とアーカイブに役立つツールとなっています。データの保存と送信のニーズが拡大し続ける中、NEWC形式はデジタル情報の管理と保存において重要な役割を果たすことが期待されています。
ファイル圧縮は冗長性を減らすことで、同じ情報がより少ないビットで済むようにします。どこまで圧縮できるかの上限は情報理論によって定められています。可逆圧縮の場合、その限界はソースのエントロピーです(シャノンの ソース符号化定理 と彼の1948年の独創的な論文 「通信の数学的理論」を参照)。非可逆圧縮の場合、レートと品質のトレードオフは レート歪み理論によって捉えられます。
ほとんどの圧縮プログラムには2つの段階があります。まず、モデルがデータ内の構造を予測または公開します。 次に、コーダーがそれらの予測をほぼ最適なビットパターンに変換します。古典的なモデリング ファミリーはレンペル–ジブです。 LZ77 (1977) とLZ78 (1978)は、繰り返される部分文字列を検出し、生のバイトの代わりに参照を出力します。 コーディング側では、 ハフマン符号化 (元の論文 1952を参照)は、より可能性の高いシンボルに短いコードを割り当てます。 算術符号化 と 範囲符号化 は、エントロピー限界に近づけるためのよりきめ細かい代替手段であり、現代の 非対称数系(ANS) は、高速なテーブル駆動の実装で同様の圧縮を実現します。
DEFLATE(gzip、zlib、ZIPで使用)は、LZ77とハフマン符号化を組み合わせたものです。その仕様は公開されています: DEFLATE RFC 1951、zlibラッパー RFC 1950、およびgzipファイル形式 RFC 1952。Gzipはストリーミング用にフレーム化されており、明示的に ランダムアクセスを提供しようとはしません。PNG画像は、PNG仕様書によれば、DEFLATEを唯一の圧縮方法として標準化しています(最大32 KiBのウィンドウ)。 「圧縮方法0… deflate/inflate… 最大32768バイト」 および W3C/ISO PNG第2版。
Zstandard (zstd): 非常に高速な 解凍で高い圧縮率を実現するために設計された、新しい汎用圧縮プログラムです。この形式は RFC 8878 ( HTMLミラーも参照)および参照仕様書 GitHubで文書化されています。gzipと同様に、基本フレームは ランダムアクセスを目的としていません。zstdのスーパーパワーの1つは辞書です。コーパスからの小さなサンプルで、多数の小さなファイルや類似のファイルで 圧縮を劇的に改善します( python-zstandard辞書ドキュメント および Nigel Taoの実例を参照)。実装は、「非構造化」と「構造化」の両方の辞書を受け入れます (ディスカッション)。
Brotli: ウェブコンテンツ(例:WOFF2フォント、HTTP)に最適化されています。静的辞書と DEFLATEのようなLZ+エントロピーコアを組み合わせます。仕様は RFC 7932で、2WBITS−16のスライディングウィンドウ(WBITSは[10, 24]、1 KiB−16 Bから 16 MiB−16 Bまで)と、 ランダムアクセスを試みないことも記されています。Brotliは、ウェブテキストでgzipをしばしば上回り、高速にデコードします。
ZIPコンテナ: ZIPは、さまざまな圧縮方法 (deflate、store、zstdなど)でエントリを保存できるファイルアーカイブです。事実上の標準はPKWAREのAPPNOTEです( APPNOTEポータル、 ホストされているコピー、およびLCの概要 ZIPファイル形式(PKWARE) / ZIP 6.3.3を参照)。
LZ4は、控えめな圧縮率で生の速度を目標としています。その プロジェクトページ (「非常に高速な圧縮」)と フレーム形式を参照してください。メモリ内キャッシュ、テレメトリ、または解凍がRAM速度に近い必要があるホットパスに最適です。
XZ / LZMAは、比較的遅い圧縮で密度(優れた圧縮率)を追求します。XZはコンテナです。 重労働は通常、LZMA/LZMA2(LZ77のようなモデリング+範囲符号化)によって行われます。 .xzファイル形式、 LZMA仕様(Pavlov)、およびLinuxカーネルのメモ XZ Embeddedについてを参照してください。XZは通常、gzipを上回り、高圧縮率の最新コー デックとしばしば競合しますが、エンコード時間は遅くなります。
bzip2は、 Burrows–Wheeler変換(BWT)、move-to-front、RLE、およびハフマン符号化を適用します。通常、gzipよりも小さいですが遅いです。 公式マニュアル およびmanページ (Linux)を参照してください。
「ウィンドウサイズ」は重要です。DEFLATE参照は32 KiBしか遡れません (RFC 1951 およびPNGの32 KiBキャップ ここに記載)。Brotliのウィンドウは、約1 KiBから16 MiBの範囲です (RFC 7932)。Zstdは、レベルごとにウィンドウと検索深度を調整します (RFC 8878)。基本的なgzip/zstd/brotliストリームは、シーケンシャルデコード用に設計されています。基本形式は ランダムアクセスを約束しませんが、コンテナ(例:tarインデックス、チャンク化されたフレーミング、または形式固有のインデックス)でそれを階層化でき ます。
上記の形式は可逆です。正確なバイトを再構築できます。メディアコーデックはしばしば非可逆です。 より低いビットレートを達成するために、知覚できない詳細を破棄します。画像では、古典的なJPEG(DCT、量子化、エントロピー 符号化)は ITU-T T.81 / ISO/IEC 10918-1で標準化されています。音声では、MP3(MPEG-1 Layer III)とAAC(MPEG-2/4)は、知覚モデルとMDCT変換に依存しています( ISO/IEC 11172-3、 ISO/IEC 13818-7、およびMDCTの概要 こちらを参照)。非可逆と可逆は共存できます(例:UIアセット用のPNG、画像/動画/音声用のWebコーデック)。