2

奇妙な問題があります-私のアプリスイートの1つは、WindowsとLinuxの両方で使用されるgzip圧縮ファイルを読み書きする必要があり、Linuxでzlibを使用して生成したファイルは、私が生成したファイルよりも2〜3倍大きいことがわかりましたWindows で使用して生成しGZipStreamます。どちらのプラットフォームでも完全に読み取れるため、ファイルを作成したプラットフォームに関係なく、圧縮が正しいことがわかります。問題は、ファイルがさまざまなタイミングでネットワークを介して転送されることであり、明らかにファイル サイズが問題になります。

私の質問は:

  1. 他の誰かがこれに遭遇しましたか
  2. 2つの間に文書化された違いはありますか?zlibでできるように圧縮レベルを指定する方法を提供しないことは知ってGZipStreamいますが、zlib側で最大圧縮を使用しています。GZipStream も最大圧縮を使用するように作成されていると仮定すると、比較的同じファイル サイズが表示されるはずではありませんか?
4

2 に答える 2

1

これが発生している理由は、使用されている圧縮アルゴリズムによるものではなく、ファイルの圧縮方法によるものだと思います。zLibマニュアルから:

「zlib形式は、メモリや通信チャネルで使用するためにコンパクトで高速になるように設計されています。gzip形式は、ファイルシステムでの単一ファイル圧縮用に設計されており、ディレクトリ情報を維持するためにzlibよりも大きなヘッダーがあり、別のzlibよりもチェック方法が遅い。」

何が起こっているのかというと、Linuxマシン上のファイルが1つのファイルに一緒にtar化されてから、その1つのファイルが圧縮されていると思います。WIndowsでは、個々のファイルを圧縮してから、圧縮して1つのファイルに保存すると思います。

これは私の理論ですが、実際にそれをサポートするものは何もありません。好奇心を満たすために、後で自宅でいくつかのトライアルテストを試すかもしれないと思った。

于 2011-06-30T22:31:09.247 に答える
1

そして答えは.... Linux バージョンは、そもそもデータを圧縮していませんでした。原因となったバグを見つけるために多くのデバッグが必要でしたが、修正後、サイズは両方のプラットフォームで同等になりました。

于 2011-09-28T13:07:44.203 に答える