Java解压缩字节数组
在服务器(C ++)上,二进制数据使用以下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)。
Inflater
另一方面,确实会处理zlib封装的数据(除非您给它提供nowrap
选项)。去搞清楚。
以上是 Java解压缩字节数组 的全部内容, 来源链接: utcz.com/qa/398556.html