2016-07-03 9 views
5

Brotliは、圧縮の長さ(9.2)についての情報がなく、ブロックの最終的な圧縮されていないサイズのメタブロックヘッダーにブロックサイズ情報を格納します。私は、複数のスレッドや、おそらくマーク・アドラーのものと同様のものを使用するために、ラッパーを作成する必要があると推測しています。pigzBrotli圧縮マルチスレッド

この場合、gzipと同じスレッド原則が適用されますか、またはマルチスレッド実装に関しては予見可能な問題はありますか?

答えて

8

この目的のためにbrotli形式をそのまま使用できます。空のメタブロックにメタデータを入れるオプションを追加するようにしました(「空」とは、メタブロックが非圧縮のデータをゼロにすることを意味します)。メタブロックを見つけるためにマーカーをメタデータに入れることができます。挿入された空のメタブロックはまた、バイト境界で次のメタブロックを開始する。

各メタブロックは、他のメタブロックとは独立して、にすることができます。そのようにストリームが構築されていれば、それらを組み合わせて圧縮するか別々に解凍することに問題はありません。可能性のある依存領域は、使用された最後の4つの距離のリングバッファであり、現在のメタブロックの先頭から後方に参照されます。並列使用の場合、メタブロックは、現在のメタブロックからの距離でいっぱいになるまで、リングバッファを参照するのではなく、最後の4つの距離に依存しないように構成されなければならない。さらに、現在のメタブロックの前に戻る距離は許されません(静的参照を含まない)。最後に、空のメタデータ・ブロックまたはメタデータ・メタブロックを追加して、簡単な連結のためにシーケンスをバイト境界に移動させます。

ところで、古いバージョンのドラフト形式にリンクしているようです。ここにはlink to the current versionがあります。

+0

これは束に役立ちます!私はメタブロック(古いドラフトが提案したように)を少し心配していましたので、あなたがそれらに入れたオプションが現在利用可能であることを本当にうれしく思います。ストリームを検証/チェックサムする方法が推奨されていますか?おそらくそれが必要ではないかもしれないが、すべてがローカルで行われていればそれは問題ではないかもしれないと私は考えていた。どうもありがとうございました! –

+1

彼らは私にして、あなたが[ここで見つけることができます](https://github.com/madler/brotli/blob/master/br-format-info/)で健全性チェックと他の機能を使ってbrotliのラッパー形式を提案するように頼まれました。 v3.txt)。しかし、私は彼らがそれを受け入れたことやそれを推薦することを知らない。 –