2012-07-06 149 views
1

我嘗試解壓縮(在Java中)使用DeflateStream在Visual Basic中壓縮的字符串時出現問題。我做了一些研究,看到並嘗試了很多使用Inflater和InflaterOutputStream在Java中解壓縮的代碼。沒有發現任何代碼成功。我瀏覽了很多網站,並在谷歌上搜索了很多方法。我可以說,關於java,inflater/deflater壓縮,visual basic,deflaterStream的關於google的前3頁已經被閱讀,但沒有成功。我想知道這是否可能(並且應該是因爲我找到了在Java和C#之間壓縮/解壓的方法:http://www.dreamincode.net/forums/topic/243808-compression-and-decompression-between-java-and-c%23/) 我也想知道是否存在有關Visual Basic DeflateStream和Java的兼容性問題模擬類Inflater/Deflater。如果有人有類似的問題,我會高度讚賞一些代碼片段。在java中解壓縮在visual basic中壓縮的字符串

感謝, 米哈伊

回答

0

好的,所以我終於設法解決了這個問題。這是一個初學者的錯誤,但它花了我足夠長的時間來解決它。這個問題表現爲,當我讀取初始文件(壓縮和加密的)時,我將文件內容保存爲字符串,而不是直接將內容作爲字節數組讀取。當然,一些字節不被字符串編碼支持,並且它們丟失了,這就是爲什麼壓縮格式沒有被識別。 Java的Inflater/Deflater類與vb.net中的DeflateStream類兼容!

非常感謝您的幫助和幫助。

0

從我讀過,Java的放氣/充氣使用zlib的。 VB用什麼來膨脹?我沒有谷歌這個,但一些參考似乎表明它使用ZIP,沒有zlib。

您是否嘗試過運行file compressed_file來確定它被壓縮的格式?

無論如何,你可能想嘗試使用ZIP算法解壓縮apache commons。

+0

你好,謝謝你的回答。我不得不提到我正在嘗試解壓縮的文件也被加密了。所以我解密了它,之後我到了現在的這一步。我嘗試解壓縮內存中保存的解密結果,所以我沒有正確的文件。我嘗試使用apache commons來解壓,但沒有成功。 – mihai 2012-07-09 14:53:57

+0

您應該將內容保存到磁盤,至少在您瞭解如何正確解壓縮之前。 – WhyNotHugo 2012-07-09 20:08:15

+0

我也試過,將內容保存在一個文件中,並解壓縮該文件,但沒有成功。我在該文件上運行了文件命令,但結果是「數據」,這不是很確定。 – mihai 2012-07-10 08:00:14

1

嘗試設置Inflater類中的nowrap參數。

根據documentation,.NET DeflateStream生成原始縮放格式RFC 1951.我推測這就是您在Visual Basic中使用的內容。

也根據documentation,Java的Inflater類解碼zlib格式,RFC 1950.zlib格式是用zlib頭和尾部包裝的原始縮放格式。正常情況下,Inflater類將會從.NET的DeflateStream的原始縮放數據上失敗。幸運的是,Inflater類爲構造函數提供了nowrap parameter(將設置爲true),這允許Inflater在不使用zlib包裝器的情況下解碼原始縮放數據。

所以,應該工作。 DeflateStream生成的數據的前十個字節是什麼?

+0

謝謝你的建議,但我已經這樣做了,並沒有奏效。 – mihai 2012-07-09 07:01:37

+0

再次感謝您的建議。爲了解決這個問題,我收集了一些解壓縮的方法(gzip,bzip2,inflater,來自apache commons的zip等),並注意到解壓縮的變體有nowrap參數集。所以再次感謝你。 – mihai 2012-07-10 08:24:20