2013-07-21 88 views
3

在Ruby中,我有一個緩衝區,其中包含使用zlib compress2()方法壓縮的數據。但是,我發現沒有辦法使用Ruby標準庫中的Zlib功能來解壓縮數據,該功能僅支持由deflate創建的數據或GZip格式的數據。Ruby:解壓縮zlib包裹的deflate數據

如何才能在Ruby中實現相當於uncompress(),最好不訴諸創建自定義C擴展?

編輯:

我找到了解決方案。經過window_bits構造函數的參數擺脫Inflate構造函數沒有成功之後,我終於明白,zlib以四字節標題爲壓縮數據前綴。因此,我簡單地除去該標頭和突然它像一個魅力:

data[0..3] = '' 
    data = Zlib::Inflate.inflate(data) 

回答

0

documentation表明紅寶石膨脹類將解壓縮compress2的輸出(),它是在ZLIB格式。我只是試了一下,它工作正常。您的壓縮數據可能不會完整保存到Ruby中。

+0

感謝您確認它確實支持。我無法讓'Inflate'類在沒有修改我的輸入數據的情況下工作,但知道它應該工作真的很有幫助:) –

1

您需要使用window_bits的負值,如here所述。我遇到過類似的問題,但在Ruby上壓縮並在JS上解壓縮(my gist for that)。希望它有助於避免魔術與四口之一:)