2009-04-21 64 views
2

我在項目上使用MiniLZO進行一些非常簡單的壓縮任務。我用一個程序壓縮,並用另一個程序解壓縮。我想知道爲解壓縮緩衝區分配多少空間。如果能夠節省我不得不使用一個整數來註釋我的輸出文件,那麼聲明多少空間解壓縮的數據應該佔用的空間,我就可以過度分配空間了。我怎麼會知道它可能需要多少空間?LZO減壓緩衝區大小

經過一番考慮,我認爲這個問題歸結爲以下幾點:lzo1x壓縮的最大壓縮比是多少?

回答

4

既然你控制了壓縮器和解壓縮器,我建議你在固定大小的塊中壓縮輸入。在我的應用程序壓縮高達64KB的每個塊,然後發出壓縮塊和壓縮數據本身的大小,所以壓縮流實際上看起來像一系列壓縮塊:

length_of_block_1 
block_1 
length_of_block_2 
block_2 
... 

解壓剛剛讀每個壓縮塊並將其解壓縮成一個64KB的緩衝區,因爲我知道這個塊是通過壓縮一個64KB塊產生的。

希望幫助,

埃裏克Melski

+0

這也是一個很好的建議,但它增加了註釋 - 正是我希望避免的。因此,我可能只是在一個塊中壓縮我的數據(因爲它已經存儲了),並用塊大小對它進行註釋。 – Benson 2009-04-22 21:24:26

2

解壓縮數據的最大大小顯然與您首先壓縮的數據的最大大小相同。

如果你的輸入大小有一個上限,那麼我猜你可以使用它,但我不得不說,這樣做的通常方法是將一個頭添加到指定未壓縮大小的壓縮緩衝區中。

+0

謝謝,我會記住這一點。可悲的是,我也無法控制最大尺寸。它看起來像我可能不得不添加一個頭,如果我想要安全地做到這一點。 – Benson 2009-04-22 21:23:05