2016-04-06 15 views
3

bzip2はブロック単位でデータを圧縮します。各ブロックはマジックナンバー1AY&SYで始まります。bzip2ブロックの非圧縮データのサイズはどのように知ることができますか?

各ブロックの背後にある非圧縮データのサイズを調べることはできますか?

する方法の1つは、bzip2ファイルblock-by-blockを解凍し、解凍された各ブロックのサイズを見つけることです。 BUT私は圧縮解除を伴わない方法を見つけようとしており、圧縮時間中に圧縮されていないブロックのサイズを知ることができます。

解凍ツールに解凍ブロックの最大サイズを教えて、十分なメモリを割り当てる必要があるというケースがあります。圧縮解除は組み込みプラットフォームで行われるため、リソースは限られています。

ブロックのbzip2ヘッダー形式には、圧縮解除されたブロックのサイズに関する情報も含まれていません。 bzip2ファイル形式については、wikipedia pageを参照してください。

注:私はCで開発されたコンソールアプリケーションでbzip2を使用しており、LinuxとWindowsの両方で動作するため、Cのコードに関して解決策が必要です。

答えて

1

ブロックのbzip2ヘッダー形式には、解凍ブロックのサイズについての情報も含まれていません。 bzip2ファイル形式については、wikipediaのページ を参照してください。

上記の声明はあなた自身の質問に答えます。圧縮解除前に利用できないため、できません。それはあなたが、それは大きさであることを知っているために、各ブロックを解凍する必要があります

http://www.forensicswiki.org/wiki/Bzip2

...どこでも、ヘッダの圧縮、ここで確認済みの前にブロックサイズをコードしません。

+0

おそらく、この情報を利用できるようにbzip2のソースコードを変更できますか?あなたが操作すべきコード内の領域を知っていれば? –

+0

はい、それを変更することができます。あなたはあなたがすでにやろうとしていることの例を得て、あなたの質問に投稿するべきです。 – Harry

+0

私はコードを調べましたが、方法を見つけることができませんでした。誰かが方法を知っているかどうか尋ねる理由です。 –

0

最初のランレングスエンコーディングが行われた後のエンコーディングで使用されるブロックサイズに関する情報のみがあります。この記事で言及されているように、最悪の場合、1ブロックから46MBの圧縮解除データが得られます.RLE反転前の出力は900KBです。

実際には、これを実行する唯一の方法は、少なくともRLEステージまでファイルを解凍し、それに基づいてサイズを計算することです。

関連する問題