【发布时间】:2010-09-10 00:27:43
【问题描述】:
首先,让我们定义一些容易混淆的术语:
deflate = compression_algorithm;
zlib = header + deflate + trailer;
gzip = header + deflate + trailer;
我正在寻找一个基本上可以让我执行以下操作的库:
if(method == "gzip"){
Response.Filter = new CompressionLibrary.OutputStream(Response.Filter, CompressionLibrary.Formats.GZIP);
}
else if(method == "deflate"){
Response.Filter = new CompressionLibrary.OutputStream(Response.Filter, CompressionLibrary.Formats.DEFLATE);
}
else if(method == "zlib"){
Response.Filter = new CompressionLibrary.OutputStream(Response.Filter, CompressionLibrary.Formats.ZLIB);
}
我正在寻找一种方法来比较测试这 3 种压缩格式以供在网络上使用。我希望每种格式的 deflate 压缩算法都是相同的精确实现。我已经破解了 zlib.net 以强制它在命令上给我原始的 deflate(通过“未记录的功能”)......但是,添加 gzip 标头和预告片有点超出我的范围。
任何人都知道这样做的 .net 库吗?
澄清:
HTTP 1.1 的deflate 压缩format 实际上是zlib 压缩格式。 Zlib 是 deflate 的包装器;它有一个 2 字节的头部和一个 4 字节的尾部,总是(当压缩方法和级别相同时)。
Gzip 在内部使用与 zlib 相同的压缩数据格式...这是 deflate(原始 deflate,而不是 HTTP 1.1 deflate [即 zlib])。根据我自己的初步测试,gzip 压缩后的数据比 zlib 大 12 倍中的 11 倍。
deflate 是一种用于压缩数据的压缩算法。当压缩数据周围没有包装方法(例如,标题或尾部)时,我将其称为“deflate” - 也许我应该将其称为 “raw deflate”。
我正在分析这些压缩方法及其在 Web 浏览器中的支持,并且需要对所有三种类型使用一种压缩方法。
【问题讨论】:
-
您的意思是“deflate”作为压缩算法,还是作为压缩方法?请注意,如果您正在谈论方法,则 deflate==zlib(请参阅:gzip.org/zlib/zlib_faq.html#faq38)我不清楚您是否有 3 个案例要处理,或者 2 个。在后一种情况下,System.IO.Compression 类是否有效?
-
您要确定什么? zlib 只是 deflate 压缩方法 (RFC 1951) 和 gzip 文件格式 (RFC 1952) 的实现。比较 gzip 和 zlib 是没有意义的。或者您是否尝试将 gzip 和 deflate 的 .NET 实现与 gzip 和 deflate 的 zlib 实现进行比较?
-
我从定义开始,因为这些术语经常被混淆。当提到 deflate 我不是在谈论 HTTP 1.1 deflate(那将是 zlib 格式:zlib.net/zlib_faq.html#faq39)。我会在我的问题中澄清。
标签: .net compression gzip zlib deflate