java - 用Java压缩,用Python解压?

标签 java android python zlib compression

我试图在我的 Android 应用程序 (Java) 中压缩一个字符串,然后使用 Python 在服务器上解压缩它。我尝试使用 Inflater 类,但随后在 python 端出现“错误:解压缩数据时错误 -3:错误的 header 检查”。在Python方面,我使用zlib来解压缩:

data_string = zlib.decompress(compressed_string)

在Android端,我们使用Deflater来压缩:

String stringData = commentData == null ? sleepData.toString() : sleepData.toString() + commentData.toString();

byte[] bytes = stringData.getBytes("UTF-8");
int length = bytes.length;
Deflater deflater = new Deflater();
deflater.setInput(bytes);
deflater.finish();
byte[] compressedBytes = new byte[length];
deflater.deflate(compressedBytes);
deflater.end();

如何在 python 中解压缩应用程序发送的字符串?

谢谢!

编辑: 这就是我们从 Android 发送并输入解压缩命令的内容:(点代表更多相同的内容 - 有很多零,最后还有一些“0b”:“78efbfbdefbfbdefbfbdefbfbd6e1b2....efbfbd190000000.....0000‌​000000000b0b0b0b0b0b‌​0b0b0

我们尝试过的事情:

-- data_string = zlib.decompress(decrypted,-zlib.MAX_WBITS),它给出了一个新错误:“解压缩数据时错误-3:存储的 block 长度无效”

-- data_string = zlib.decompressobj(decrypted,15+32) 和 data_string = zlib.decompress(compressed_string, 16+zlib.MAX_WBITS) 都给出初始错误“无效的 header 检查”。

最佳答案

添加16+zlib.MAX_WBITS15 + 32作为解压缩中的第二个[可选]wbits参数:https://docs.python.org/2/library/zlib.html#zlib.decompress

data_string = zlib.decompress(compressed_string, 16+zlib.MAX_WBITS)

编辑: 根据您将压缩字节传递给 Python 的方式,您的问题可能在于 Python 如何读取压缩字节。

我建议在 Java 中对压缩字节使用 Base64 编码,然后在 Python 中解码 Base64,然后以这种方式解压缩这些字节...

Java:

String inputString = "blahblahblah";
byte[] input = inputString.getBytes("UTF-8");

// Compress the bytes
byte[] output = new byte[100];
Deflater compresser = new Deflater();
compresser.setInput(input);
compresser.finish();
int compressedDataLength = compresser.deflate(output);
compresser.end();
System.out.println(Base64.getEncoder().encodeToString(output)); 

Python:

import base64
import zlib
base64_binary = b"eJxLyknMSIJiAB8CBMYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
deflate_bytes=base64.decodebytes(base64_binary)
zlib.decompress(deflate_bytes)
# b'blahblahblah'

相关:

How can I decompress a gzip stream with zlib?

Python decompressing gzip chunk-by-chunk

Byte Array in Python

关于java - 用Java压缩,用Python解压?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40247057/

相关文章:

python - '<生成器对象 <genexpr> 位于 0x0000014A76371040>'

java - ListView 未显示/出现 android studio

java - Spring Injected Bean 属性为空

android - Add an item at current progressBar position - 创建自定义进度条

android - 如何使用 native 代码和 Meteor 代码部署 Android 应用程序?

python - 如何在numpy中创建数组矩阵?

java - 主题的不同布局目录

java - 如何使用比较器接口(interface)按字符串键对映射进行排序

android - 配置 Gson 以使用多种日期格式

python - pip python 不在 linux 上安装模块