在Java中解压缩zlib压缩的字符串

时间:2011-04-03 21:16:07

标签: java python zlib

我有一个Java模块,它从远程Python脚本接收压缩字符串。 Python脚本使用zlib.compress()压缩字符串。我只想在Java中解压缩并将其显示给用户。

Java的内置zip.Deflater对象的man page非常明确地描述了如何解压缩使用zlib.compress()压缩的内容。但是,这种方法对我不起作用。根据我使用的编码,我得到“错误的标头检查”错误或者解压缩返回一个空字符串。

那么,我该如何解压呢?数据在传输中没有被破坏,压缩的字符串以“x \ x9c”开头,这显然适用于zlib压缩的东西。

我之前从未处理过此级别的压缩/解压缩,而且我感到很困惑。为了额外的功劳,我很感激压缩/未压缩和充气/放气之间的解释。根据{{​​3}}他们是不同的,但大多数互联网似乎可以互换使用它们的zlib。这只是试图找到一个更难的解决方案,因为我无法告诉你我是否真的试图“解压缩”或“膨胀”这些数据。

2 个答案:

答案 0 :(得分:2)

出现了混乱,因为一些明亮的火花开始将zlib协议描述为“deflate”。它可能会帮助您阅读these Java docs中提到的RFC。

同样this SO topic非常重要。

我建议你这样做

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

在Python(A)中

并使用Deflater(B)比较使用等效Java代码的结果。还要确保您可以充气B以恢复测试输入。检查您是否患有unicode< - > Python或Java或两者中的字节复杂性。

根据你引用的SO主题中@patthoyts的回答,你有没有尝试过Python“deflate”?

答案 1 :(得分:0)

似乎Python的zlib.compress()使用gzip,你确定使用nowrap参数为gzip兼容的uncompression创建Inflater吗?

膨胀/收缩仅用于我认为的DEFLATE算法,而压缩/解压缩是更通用的术语。