首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GZipStream还是DeflateStream?

GZipStream还是DeflateStream?
EN

Stack Overflow用户
提问于 2010-04-08 10:29:16
回答 5查看 28K关注 0票数 61

MSDN文档告诉我如下:

GZipStream类使用gzip数据格式,其中包括用于检测数据损坏的循环冗余检查值。gzip数据格式使用与DeflateStream类相同的压缩算法。

GZipStream似乎为输出添加了一些额外的数据(相对于DeflateStream)。我想知道,在什么样的场景中,使用GZipStream而不是DeflateStream是必要的?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-04-08 19:14:47

泄气只是压缩算法。GZip实际上是一种格式。

如果使用GZipStream压缩文件(并将其保存为扩展名.gz),则结果实际上可以由WinZip或gzip工具等存档程序打开。如果使用DeflateStream进行压缩,这些工具将无法识别该文件。

如果压缩文件设计为由这些工具打开,那么就必须使用GZipStream而不是DeflateStream

如果您在不可靠的介质(即internet连接)上传输大量数据,而不使用诸如TCP/IP之类的纠错协议,我也会认为这是非常重要的。例如,您可能正在通过串口、原始套接字或UDP进行传输。在这种情况下,您肯定需要嵌入GZip格式的CRC信息,以确保数据是正确的。

票数 83
EN

Stack Overflow用户

发布于 2011-11-15 16:32:15

GZipStream与DeflateStream相同,但它添加了一些CRC以确保数据没有错误。

票数 13
EN

Stack Overflow用户

发布于 2010-04-08 18:53:40

我的第一个答案完全错了。我查阅了Mono源代码,发现GZipStream类实际上将其读/写(以及几乎任何其他)调用重定向到内部DeflateStream对象的方法的适当调用:

代码语言:javascript
复制
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。这当然不是你问题的答案,但也许会有一点帮助。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2599080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档