未知压缩方式

时间:2019-03-05 10:28:00

标签: c# zip compression

在数据库中,我有带有图表数据的blob列。

数据已压缩,不幸的是,我尝试了不同的解决方案,但都无济于事。这是什么类型的压缩?没有人经过测试无法正常工作。我测试了zip,bzip,zlib,gzip2等

以下是数据库中的示例:

5a 49 50 08 52 00 00 78 9c ed 9c 0b 54 56 55 fe (...)

完整二进制文件:https://www.paste.org/97372

转换为ASCII后,前三个字符为“ ZIP”(第四个字符始终是随机的,这对我来说这是标题的末尾),但是我找不到这种压缩类型。

我检查了其他斑点,发现“ 78 9c”始终位于同一位置。然后,我尝试ZLIB.NET:

 public static void DecompressData(byte[] inData, out byte[] outData)
    {
        using (MemoryStream outMemoryStream = new MemoryStream())
        using (ZOutputStream outZStream = new ZOutputStream(outMemoryStream))
        using (Stream inMemoryStream = new MemoryStream(inData))
        {
            CopyStream(inMemoryStream, outZStream);
            outZStream.finish();
            outData = outMemoryStream.ToArray();
        }
    }

    public static void CopyStream(System.IO.Stream input, System.IO.Stream output)
    {
        byte[] buffer = new byte[2000]; //example
        int len;
        while ((len = input.Read(buffer, 0, 2000)) > 0)
        {
            output.Write(buffer, 0, len);
        }
        output.Flush();
    }

不幸的是,出现相同的错误:

  

zlib.ZStreamException:“膨胀:未知的压缩方法”

1 个答案:

答案 0 :(得分:0)

78 9c是zlib流的标头。实际上,从那里开始的10,752字节是有效的zlib流,该流将解压缩为21,000字节。 “邮编”之后和78 9c之前的四个字节(08 52 00 00)是按照小尾数顺序排列的21,000。

因此,您的格式为“ ZIP”,其后是小字节顺序的四个字节的未压缩大小,然后是zlib流。