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

回到顶部