2011-04-03 125 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