代码之家  ›  专栏  ›  技术社区  ›  David Murdoch

一个用于.net中deflate、gzip和zlib的库

  •  4
  • David Murdoch  · 技术社区  · 14 年前

    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);
    }
    

    有人知道一个.net库可以这样做吗?


    澄清:

    放气 格式 实际上是 兹利布 压缩格式。Zlib是deflate的包装器;它有一个2字节的头和一个4字节的尾, (压缩方法和级别相同时)。

    Gzip公司 在内部使用与zlib相同的压缩数据格式…它是deflate(原始deflate,而不是HTTP 1.1 deflate[它是zlib])。根据我自己的初步测试,gzip的数据是zlib的12倍中的11倍。

    “原始放气” 相反。

    我正在分析这些压缩方法及其在web浏览器中的支持,需要对所有三种类型使用一种压缩方法。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Cheeso    14 年前

    DotNetZip RFC 1950 (ZLIB) RFC 1951 (DEFLATE) ,和 RFC 1952 (GZIP) . 这三种方法都使用相同的底层压缩引擎。

        2
  •  3
  •   Jim Mischel    14 年前

    根据我对标准文档的阅读以及我对zlib、.NET gzip和deflate实现以及其他几个.NET压缩包所做的工作,我决定:

    2) 大小的差别很小。deflate和zlib之间的差别通常只有几个字节。deflate和gzip之间的差别最多只有几十个字节。无论文件大小如何,都是如此。

    3) 不同的deflate实现具有广泛不同的压缩比和执行时间。例如,zlib实现比.NET3.5实现提供了更好的压缩和更快的执行。

    5) 由于CRC计算,创建gzip比创建zlib花费的时间要长得多。

    我不知道有哪一个C#库允许您在给定原始deflate数据的情况下生成zlib或gzip文件,但是如果您研究标准文档,您应该能够相当容易地构造它们。

    我也不知道有哪款浏览器支持“raw deflate”。但是,我不能说我真的试过。我一直使用“HTTP1.1deflate”。