2011-04-03 122 views
2

一個zlib的壓縮串我有一個是從遠程Python腳本接收壓縮的字符串一個Java模塊。 Python腳本使用zlib.compress()壓縮字符串。我只是想在Java中解壓縮並將其顯示給用戶。解壓縮在Java中

用於Java的內置zip.Deflater對象的man page非常明確地描述瞭如何解壓縮使用zlib.compress()壓縮過的東西。但是,這種方法對我不起作用。根據我使用的編碼,我要麼得到「不正確的頭檢查」錯誤,要麼解壓縮返回一個空字符串。

所以,我怎麼解壓呢?數據在傳輸過程中不會受到破壞,壓縮字符串以「x \ x9c」開頭,這顯然適用於zlib壓縮的內容。

我從來沒有處理之前這個級別的壓縮/解壓縮和我感到困惑。爲了額外的信用,我會很感激壓縮/未壓縮和膨脹/縮小之間的解釋。根據this他們是不同的,但大多數互聯網似乎可交換使用zlib。這只是試圖找到一個更困難的解決方案,因爲我無法告訴你我究竟是在試圖「解壓縮」還是「膨脹」這些數據。

+2

使用Inflater類進行解壓縮。 – 2011-04-03 21:24:56

+0

感謝大家的幫助。我們決定推遲這個功能,因爲它是「很高興有」,並且佔用了我太多的時間。您的意見是有幫助的,但沒有解決問題。 – dshapiro 2011-04-06 15:42:17

回答

2

的混亂已經出現,因爲一些明亮的火花開始描述的zlib協議爲「放氣」。它可能會幫助您閱讀these Java docs中提到的RFC。

而且this SO topic是很相關的。

我建議你在Python(A)做

print repr(zlib.compress("The quick brown dog etc etc")

,結果使用使用Deflater(B)相應的Java代碼進行比較。同時確保您可以充氣B來恢復您的測試輸入。檢查你是否沒有受到Python或Java或兩者兼有的unicode < - >字節的困擾。

您是否按照@patthoyts在您所引用的SO主題中的回答,嘗試過執行Python「deflate」?

+0

這些都是好主意!這些測試表明,我使用的Python和Java是相同的壓縮算法,並且Java代碼可以成功解壓縮一些字符串(不是由於某種原因從Python發送的字符串)。我們現在推遲功能,但感謝您的幫助。 – dshapiro 2011-04-06 15:45:35

+0

@獨一無二:請考慮接受答案(答案左邊的大勾)。 – 2011-04-06 20:12:05

0

看來Python的zlib.compress()使用gzip的,你一定要與GZIP兼容的解壓縮NOWRAP參數創建吹氣?

充氣/放氣只用於DEFLATE算法我相信,而壓縮/解壓縮是更通用的術語。

+0

我嘗試使用nowrap參數無濟於事。這是我沒有意識到的東西,但是,非常感謝您的關注。 – dshapiro 2011-04-06 15:46:23