当前位置:  开发笔记 > 编程语言 > 正文

GZipStream还是DeflateStream类?

如何解决《GZipStream还是DeflateStream类?》经验,为你挑选了3个好方法。

MSDN文档告诉我以下内容:

GZipStream类使用gzip数据格式,该格式包括用于检测数据损坏的循环冗余校验值.gzip数据格式使用与DeflateStream类相同的压缩算法.

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



1> Aaronaught..:

Deflate只是压缩算法.GZip实际上是一种格式.

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

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

我也认为这是必不可少的,如果你在传输大量数据在不可靠的介质(即互联网连接),而不是使用纠错协议,如TCP/IP.例如,您可能通过串行端口,原始套接字或UDP进行传输.在这种情况下,您肯定需要嵌入GZip格式的CRC信息,以确保数据正确.



2> 小智..:

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



3> n535..:

好吧,我的第一个答案完全错了.我查看了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.这肯定不是你问题的答案,但也许它会有所帮助.

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有