在服务器(C ++)上,二进制数据使用以下ZLib函数压缩:
ZLib
compress2()
并将其发送到客户端(Java)。在客户端(Java)上,应使用以下代码段对数据进行解压缩:
public static String unpack(byte[] packedBuffer) { InflaterInputStream inStream = new InflaterInputStream(new ByteArrayInputStream( packedBuffer); ByteArrayOutputStream outStream = new ByteArrayOutputStream(); int readByte; try { while((readByte = inStream.read()) != -1) { outStream.write(readByte); } } catch(Exception e) { JMDCLog.logError(" unpacking buffer of size: " + packedBuffer.length); e.printStackTrace(); // ... the rest of the code follows }
问题是,当它尝试读入while循环时,它总是抛出:
java.util.zip.ZipException:无效的存储块长度
在检查其他可能原因之前,有人可以告诉我是否可以使用compress2在一侧进行压缩,并在另一侧使用上述代码将其解压缩,因此可以解决此问题?另外,如果有人对这里可能出了什么问题有个线索(我知道我在这里没有提供太多的代码,但是项目很大。
谢谢。
InflaterInputStream期望原始压缩数据(RFC 1951),而compress2()生成zlib封装的压缩数据(RFC 1950周围的RFC 1950)。
InflaterInputStream
Inflater另一方面,确实会处理zlib封装的数据(除非您给它提供nowrap选项)。去搞清楚。
Inflater
nowrap