【发布时间】:2011-06-08 17:11:51
【问题描述】:
我有这个未压缩的字节数组:
0E 7C BD 03 6E 65 67 6C 65 63 74 00 00 00 00 00 00 00 00 00 42 52 00 00 01 02 01
00 BB 14 8D 37 0A 00 00 01 00 00 00 00 05 E9 05 E9 00 00 00 00 00 00 00 00 00 00
00 00 00 00 01 00 00 00 00 00 81 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 05 00 00 01 00 00 00
我需要使用 deflate 算法(在 zlib 中实现)对其进行压缩,从我在 C# 中搜索到的等效算法将使用 GZipStream,但我根本无法匹配压缩结果。
这是压缩代码:
public byte[] compress(byte[] input)
{
using (MemoryStream ms = new MemoryStream())
{
using (GZipStream deflateStream = new GZipStream(ms, CompressionMode.Compress))
{
deflateStream.Write(input, 0, input.Length);
}
return ms.ToArray();
}
}
这是上面压缩代码的结果:
1F 8B 08 00 00 00 00 00 04 00 ED BD 07 60 1C 49 96 25 26 2F 6D CA 7B 7F 4A F5 4A
D7 E0 74 A1 08 80 60 13 24 D8 90 40 10 EC C1 88 CD E6 92 EC 1D 69 47 23 29 AB 2A
81 CA 65 56 65 5D 66 16 40 CC ED 9D BC F7 DE 7B EF BD F7 DE 7B EF BD F7 BA 3B 9D
4E 27 F7 DF FF 3F 5C 66 64 01 6C F6 CE 4A DA C9 9E 21 80 AA C8 1F 3F 7E 7C 1F 3F
22 7E 93 9F F9 FB 7F ED 65 7E 51 E6 D3 F6 D7 30 CF 93 57 BF C6 AF F1 6B FE 5A BF
E6 AF F1 F7 FE 56 7F FC 03 F3 D9 AF FB 5F DB AF 83 E7 0F FE 35 23 1F FE BA F4 FE
AF F1 6B FC 1A FF 0F 26 EC 38 82 5C 00 00 00
这是我期待的结果:
78 9C E3 AB D9 CB 9C 97 9A 9E 93 9A 5C C2 00 03 4E 41 0C 0C 8C 4C 8C 0C BB 45 7A
CD B9 80 4C 90 18 EB 4B D6 97 0C 28 00 2C CC D0 C8 C8 80 09 58 21 B2 00 65 6B 08
C8
我做错了什么,有人可以帮我吗?
【问题讨论】:
-
为什么您期望不同实现的输出相同?有很多方法可以压缩一些可以用同一个解压器解压的内容。但在你的情况下,zip流似乎输出了某种标题。
-
GZipStream 的结果不仅不同,而且比未压缩的输入要大!
-
@Inuyasha 我已经明白了,这就是为什么我正在寻找如何通过试图找出我做错了什么来使它们相等,正如我所提到的,我需要使用 zlib 的 deflate 实现在 C# 中。 @CodeInChaos 我不知道这是我在 SO 周围搜索的不同实现,我发现一些回复说 GZip 是它的等价物,我确实发现它不是当我开始测试它时。
-
除了增加的大小之外,我认为还有另一个程序解压缩这个。怎么样?
标签: c# bytearray zlib compression