MSDN文档告诉我如下:
GZipStream类使用gzip数据格式,其中包括用于检测数据损坏的循环冗余检查值。gzip数据格式使用与DeflateStream类相同的压缩算法。
GZipStream似乎为输出添加了一些额外的数据(相对于DeflateStream)。我想知道,在什么样的场景中,使用GZipStream而不是DeflateStream是必要的?
发布于 2010-04-08 19:14:47
泄气只是压缩算法。GZip实际上是一种格式。
如果使用GZipStream压缩文件(并将其保存为扩展名.gz),则结果实际上可以由WinZip或gzip工具等存档程序打开。如果使用DeflateStream进行压缩,这些工具将无法识别该文件。
如果压缩文件设计为由这些工具打开,那么就必须使用GZipStream而不是DeflateStream。
如果您在不可靠的介质(即internet连接)上传输大量数据,而不使用诸如TCP/IP之类的纠错协议,我也会认为这是非常重要的。例如,您可能正在通过串口、原始套接字或UDP进行传输。在这种情况下,您肯定需要嵌入GZip格式的CRC信息,以确保数据是正确的。
发布于 2011-11-15 16:32:15
GZipStream与DeflateStream相同,但它添加了一些CRC以确保数据没有错误。
发布于 2010-04-08 18:53:40
我的第一个答案完全错了。我查阅了Mono源代码,发现GZipStream类实际上将其读/写(以及几乎任何其他)调用重定向到内部DeflateStream对象的方法的适当调用:
public override int Read (byte[] dest, int dest_offset, int count)
{
return deflateStream.Read(dest, dest_offset, count);
}
public override void Write (byte[] src, int src_offset, int count)
{
deflateStream.Write (src, src_offset, count);
}唯一的区别是,它总是创建一个DeflateStream对象,并将gzip标志设置为true。这当然不是你问题的答案,但也许会有一点帮助。
https://stackoverflow.com/questions/2599080
复制相似问题