Как распаковать сжатый поток (не gzip), используя SharpZipLib? - PullRequest
1 голос
/ 25 марта 2012

Я работаю над приложением на Windows Phone и пытаюсь получить данные с веб-сервера методом HTTP GET, а поле кодирования содержимого в ответе указывает, что данные были сжаты с помощью алгоритма дефляции.

Я нашел полезную библиотеку SharpZipLib, которая может работать с потоком gzip с помощью GZipInputStream, но она не работает для потока с дефляцией.

Как я могу уменьшить поток, используя SharpZipLib? Или есть другой способ справиться с этим?

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 25 марта 2012

Осторожно. Http-сервер, возвращающий метод deflate, может доставить одну из двух разных вещей. Либо поток с дефлированием в zlib (RFC 1950) (RFC 1951) (это то, что указано в стандарте http), либо поток необработанного дефляции (RFC 1951). Последний виден с серверов Microsoft, написанных кем-то, кто не внимательно прочитал стандарт.

Вы можете решить эту проблему, попробовав это обоими способами (начиная с правильного пути), или не предоставив deflate как принятый метод от вашего клиента, только разрешив gzip. С gzip нет никакой двусмысленности.

Для zlib может существовать интерфейс, позволяющий вам попробовать оба способа, а если нет, то вам может потребоваться написать собственный интерфейс или использовать zlib напрямую. В zlib вы можете декодировать поток в zlib, начиная с inflateInit (strm), или вы можете декодировать необработанный поток deflate, начиная с inflateInit2 (strm, -15).

1 голос
/ 25 марта 2012

Не знаю, как этого добиться с SharpZipLib, но у вас есть другой выбор: DotNetZip , в котором DeflateStream все упаковано и готово к использованию!

Кроме того, AFAIK, DotNetZip имеет лицензию Ms-Pl, поэтому его можно использовать в коммерческих приложениях, а SharpZipLib (GPL) - нет!

...