用Java压缩,用Python解压缩?

时间:2016-10-25 18:23:26

标签: java android python zlib compression

我正在尝试在我的Android应用程序(Java)中压缩字符串,然后使用Python在服务器上解压缩它。我尝试使用Inflater类,但后来我得到一个"错误:解压缩数据时错误-3:错误的标题检查"在python方面。在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' s"最后:" 78efbfbdefbfbdefbfbdefbfbd6e1b2 .... efbfbd190000000 ..... 0000 000000000b0b0b0b0b0b 0b0b0b0b0b

我们尝试过的事情:

- data_string = zlib.decompress(decrypted,-zlib.MAX_WBITS),它会产生一个新错误:"解压缩数据时出错-3:存储的块长度无效"

- data_string = zlib.decompressobj(decrypted,15 + 32)和data_string = zlib.decompress(compressed_string,16 + zlib.MAX_WBITS),它们都给出了初始错误&#34;无效的标题检查&#34;。< / p>

1 个答案:

答案 0 :(得分:0)

在解压缩中添加16+zlib.MAX_WBITS15 + 32作为第二个[可选] wbits arg: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,然后解压缩这些字节...

爪哇:

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