如何使用SharpZipLib解压缩deflate流(而不是gzip)?

时间:2012-03-24 22:00:59

标签: windows-phone-7 deflate sharpziplib compression

我正在使用Windows Phone上的应用程序并尝试通过HTTP GET方法从Web服务器获取数据,并且响应中的内容编码字段指示数据是通过deflate算法压缩的。

我找到了有用的库SharpZipLib,它可以使用GZipInputStream处理gzip流,但它不适用于deflate流。

如何使用SharpZipLib压缩流?或者还有其他方法可以解决这个问题吗?

非常感谢!

2 个答案:

答案 0 :(得分:1)

不知道如何使用SharpZipLib实现这一目标,但是您确实有另一种选择,DotNetZip已经打包DeflateStream并准备好在这里使用!

此外,AFAIK,DotNetZip是Ms-Pl许可,所以它可以用于商业应用,SharpZipLib(GPL)不能!

答案 1 :(得分:1)

当心。返回deflate方法的http服务器可以提供两种不同的东西之一。 zlib-wrapped(RFC 1950)deflate(RFC 1951)流(这是http标准指定的)或raw deflate(RFC 1951)流。后者是从微软服务器上看到的,由没有仔细阅读标准的人编写。

您可以通过两种方式尝试(以正确的方式开始),或者不通过客户端提供deflate作为可接受的方法来解决此问题,只允许使用gzip。 gzip没有歧义。

可能有zlib的接口允许您尝试两种方式,如果没有,您可能需要编写自己的接口或直接使用zlib。在zlib中,您可以通过以inflateInit(strm)开头解码zlib包装的流,或者您可以解码以inflateInit2(strm,-15)开头的原始deflate流。