小编典典

Java解压缩字节数组

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在一侧进行压缩,并在另一侧使用上述代码将其解压缩,因此可以解决此问题?另外,如果有人对这里可能出了什么问题有个线索(我知道我在这里没有提供太多的代码,但是项目很大。

谢谢。


阅读 445

收藏
2020-11-26

共1个答案

小编典典

InflaterInputStream期望原始压缩数据(RFC
1951
),而compress2()生成zlib封装的压缩数据(RFC
1950
周围的RFC
1950)。

Inflater另一方面,确实会处理zlib封装的数据(除非您给它提供nowrap选项)。去搞清楚。

2020-11-26