当前位置: 首页 > 面试题库 >

Java解压缩字节数组

谷梁宏恺
2023-03-14
问题内容

在服务器(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选项)。去搞清楚。



 类似资料:
  • 问题内容: 在服务器(C ++)上,二进制数据使用以下函数压缩: 并将其发送到客户端(Java)。在客户端(Java)上,应使用以下代码段对数据进行解压缩: 问题是,当它尝试读入while循环时,它总是抛出: java.util.zip.ZipException:无效的存储块长度 在检查其他可能原因之前,有人可以告诉我是否可以使用compress2在一侧进行压缩,并在另一侧使用上述代码将其解压缩,

  • 问题内容: 情况如下: 我从Amazon S3获取gzip压缩的xml文档 我以文件形式阅读它们 题 如何直接解压缩流并读取内容? 我不想创建临时文件,它们看起来不太好。 问题答案: 是的,您可以使用该模块解压缩字节流: 到标头的32个偏移量表示gzip标头是预期的但已跳过。 S3键对象是一个迭代器,因此您可以执行以下操作:

  • 问题内容: 我正在尝试编写一个可以压缩数据的类。以下代码失败(不会引发异常,但目标.gz文件为空。) 此外:我不想像在所有示例中一样直接生成.gz文件。我只想获取压缩的数据,以便在将数据写入文件之前将其加密。 如果我直接写入文件,则一切正常: 但是,如果我想将其“旁路”到字节数组流,则不会产生单个字节- 始终为空。 问题答案: 问题是您没有关闭。在关闭它之前,输出将是不完整的。 您只需要 在 读取

  • 问题内容: 我在想办法也无法在Java中解压缩String时遇到麻烦。这是我要学习的基本Java类,因此只需要基本命令,没有什么花哨的地方。它能够输入的目标 在命令提示符下,它将打印(就像它压缩参数字符串一样)。 另一个目标是输入 它将打印(就像它将解压缩参数String一样)。减压是我遇到的问题。这是我的代码,非常感谢我得到的任何帮助。 问题答案: Quick Code for you..

  • 问题内容: 我正在使用以下代码来压缩和解压缩字符串数据,但是我面临的问题是,它很容易被压缩而不会出错,但是decompress方法会引发以下错误。 线程“主”中的异常java.io.IOException:不是GZIP格式 仍然不知道如何解决此问题!!! 问题答案: 这是因为 发送您可以从中获得的,并在其中使用它来构建您的。以下是需要在代码中进行的更改。

  • 问题内容: 我有一堆来自某些Web请求的文件,有些文件是gzip压缩的,我需要将它们解压缩并将其打印为字符串。这是我第一次尝试使用golang,尝试了一些在网上找到的示例,但无法正常使用。 这是我尝试的最后一个测试: 但它显示了错误:panic:,与其他一些示例相同。 如何解压缩字节数组的内容? 问题答案: 这根本不是gzip数据。正确的gzip数据以魔术序列开头,即。就此而言,它正确地抱怨 gz