我有一个Java模块,它从远程Python脚本接收压缩字符串。 Python脚本使用zlib.compress()
压缩字符串。我只想在Java中解压缩并将其显示给用户。
Java的内置zip.Deflater对象的man page非常明确地描述了如何解压缩使用zlib.compress()
压缩的内容。但是,这种方法对我不起作用。根据我使用的编码,我得到“错误的标头检查”错误或者解压缩返回一个空字符串。
那么,我该如何解压呢?数据在传输中没有被破坏,压缩的字符串以“x \ x9c”开头,这显然适用于zlib压缩的东西。
我之前从未处理过此级别的压缩/解压缩,而且我感到很困惑。为了额外的功劳,我很感激压缩/未压缩和充气/放气之间的解释。根据{{3}}他们是不同的,但大多数互联网似乎可以互换使用它们的zlib。这只是试图找到一个更难的解决方案,因为我无法告诉你我是否真的试图“解压缩”或“膨胀”这些数据。
答案 0 :(得分:2)
出现了混乱,因为一些明亮的火花开始将zlib协议描述为“deflate”。它可能会帮助您阅读these Java docs中提到的RFC。
同样this SO topic非常重要。
我建议你这样做
print repr(zlib.compress("The quick brown dog etc etc")
并使用Deflater
(B)比较使用等效Java代码的结果。还要确保您可以充气B以恢复测试输入。检查您是否患有unicode< - > Python或Java或两者中的字节复杂性。
根据你引用的SO主题中@patthoyts的回答,你有没有尝试过Python“deflate”?
答案 1 :(得分:0)
似乎Python的zlib.compress()
使用gzip,你确定使用nowrap参数为gzip兼容的uncompression创建Inflater吗?
膨胀/收缩仅用于我认为的DEFLATE算法,而压缩/解压缩是更通用的术语。