在数据库中,我有带有图表数据的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:“膨胀:未知的压缩方法”
答案 0 :(得分:0)
78 9c
是zlib流的标头。实际上,从那里开始的10,752字节是有效的zlib流,该流将解压缩为21,000字节。 “邮编”之后和78 9c
之前的四个字节(08 52 00 00
)是按照小尾数顺序排列的21,000。
因此,您的格式为“ ZIP”,其后是小字节顺序的四个字节的未压缩大小,然后是zlib流。