当前位置: 首页 > 知识库问答 >
问题:

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
}

问题是,当它尝试读取时,它总是抛出:

java.util.zip。ZipException:存储的块长度无效

在我检查其他可能的原因之前,有人能告诉我我可以用压缩器2在一侧压缩并使用上述代码在另一侧解压缩它,这样我就可以消除这个问题了吗?此外,如果有人对这里可能出现的问题有可能的线索(我知道我在这里没有提供太多的代码,但项目相当大。

谢谢

共有1个答案

管景天
2023-03-14

我认为问题不在于unpack方法,而在于packedBuffer内容。开箱工作正常

public static byte[] pack(String s) throws IOException {
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    DeflaterOutputStream dout = new DeflaterOutputStream(out);
    dout.write(s.getBytes());
    dout.close();
    return out.toByteArray();
}

public static void main(String[] args) throws Exception {
    byte[] a = pack("123");
    String s = unpack(a);   // calls your unpack
    System.out.println(s);
}

输出

123
 类似资料:
  • 问题内容: 在服务器(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