2009-04-21 16 views
2

私は、プロジェクト上でMiniLZOを使用しています。私は1つのプログラムで圧縮しており、別のプログラムで圧縮解除しています。減圧バッファーにどれくらいのスペースを割り当てるかを知りたい。私は、出力ファイルに圧縮解除されたデータがどのくらいのスペースを取るべきかを宣言する整数で注釈を付ける手間を省くことができれば、スペースを過剰に割り当てても問題ありません。どのくらいのスペースを取ることができるのだろうか?LZO圧縮解除バッファーサイズ

いくつか検討した後、私はこの質問を次のように説明します:lzo1x圧縮の最大圧縮率はいくらですか?

答えて

4

コンプレッサーとデコンプレッサーの両方を制御するので、固定サイズのブロックで入力を圧縮することをお勧めします。私のアプリケーションでは、私は、圧縮ブロックのサイズと圧縮データ自体を放出、その後、各ブロックに64キロバイトまで圧縮し、その圧縮されたストリームは、実際に圧縮された一連のブロックのようになります。

length_of_block_1 
block_1 
length_of_block_2 
block_2 
... 

デコンプレッサがちょうど読みそれぞれの圧縮されたブロックを圧縮し、64 KBのバッファに圧縮します。これは、そのブロックが64 KBのブロックを圧縮して生成されたことを知っているからです。

エリックMelski

+0

これも良い提案ですが、注釈を追加しています。まさに私が避けたいものです。そのように、私はただ一つのブロックでデータを圧縮するだけでよく(それは既にそれがどのように保存されているかと同じように)、ブロックサイズで注釈を付けることができます。 – Benson

+0

出力に*解凍された*サイズを格納したくないと思っていました。入力ブロックが常にNバイト未満であることを保証しない限り、何らかのブロックマーカの保存を避けることはできません。圧縮された各ストリームには正確に1つのブロックがあるため、デリミタは必要ありません。または、デコンプレッサを拡張して部分的な結果を返すことができ、バッファをいっぱいにするときには「もっとやる」コードなので、繰り返し入力して入力全体を解凍することができます。 –

+0

良い提案はありますが、圧縮解除されたバッファーのサイズを保存する方が簡単な方法だと思います。だから、私は私の質問への答えは、 "それを乗り越え、圧縮解除されたサイズで注釈をつける"と思う。 – Benson

2

圧縮解除されたデータの最大サイズは、最初に圧縮したデータの最大サイズとは明らかに同じです。

あなたの入力サイズに上限がある場合、私はそれを使うことができると思いますが、これを行う通常の方法は圧縮されていないサイズを指定する圧縮バッファにヘッダを追加することです。

+0

、助け

希望おかげで、私は心の中でそれをしておこう。悲しいことに、私は最大サイズのどちらも制御できません。私がこれを安全にやりたいのであれば、ヘッダを追加する必要があるようです。 – Benson

関連する問題