我正在使用Windows Phone上的应用程序并尝试通过HTTP GET方法从Web服务器获取数据,并且响应中的内容编码字段指示数据是通过deflate算法压缩的。
我找到了有用的库SharpZipLib,它可以使用GZipInputStream处理gzip流,但它不适用于deflate流。
如何使用SharpZipLib压缩流?或者还有其他方法可以解决这个问题吗?
非常感谢!
答案 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流。