2012-03-24 19 views
1

私はWindows Phone上のアプリケーションで作業しており、HTTP GETメソッドでWebサーバーからデータを取得しようとしています。レスポンスのcontent-encodingフィールドは、データがdeflateアルゴリズムによって圧縮されたことを示します。SharpZipLibを使ってデフレートストリーム(gzipではない)を解凍するには?

有用なライブラリSharpZipLibが見つかりました.SharpZipLibは、gzipストリームをGZipストリームで処理できますが、ストリームのデフレートには使用できません。

SharpZipLibを使用してストリームを抑制するにはどうすればよいですか?それともそれに対処する他の方法がありますか?

ありがとうございます!

答えて

1

SharpZipLibでこれを実現する方法がわかりませんが、がすべて用意され、ここで使用できるように別の選択肢があり、DotNetZipです。

さらに、AFAIK、DotNetZipはMs-Plライセンスを受けているため商用アプリケーションでも使用できますが、SharpZipLib(GPL)では使用できません。

+1

SharpZipLib for Windows Phoneは、ライブラリのバイナリ形式を使用する場合、商用アプリケーションで使用できます。 –

+0

ニース、その部分をクリアしてくれてありがとう、@リチャード・シュラレー! –

+0

ありがとう! DotNetZipのDeflateStreamは完全に機能します。 – cotaku39

1

注意してください。 deflateメソッドを返すhttpサーバは、2つの異なるものの1つを提供するかもしれません。 zlibでラップされた(RFC 1950)ストリーム(RFC 1951)ストリーム(HTTP標準で指定されているストリーム)または未処理のストリーム(RFC 1951)ストリーム。後者は、標準を慎重に読んでいない人が書いたマイクロソフトのサーバーから見てきました。

これを解決するには、両方向(正しい方法から始める)か、クライアントから受け入れたメソッドとしてdeflateを指定せず、gzipのみを許可します。 gzipのあいまいさはありません。

両方の方法で試してみることができるzlibへのインターフェイスがあります。そうでない場合は、独自のインターフェイスを作成するか、zlibを直接使用する必要があります。 zlibでは、inflateInit(strm)で始まるzlibでラップされたストリームをデコードすることも、inflateInit2(strm、-15)で始まる生のデフレートストリームをデコードすることもできます。

+0

答えていただきありがとうございますが、リモートサーバーはgzipストリームを返さないため、どのバージョンが収縮しているのかわかりません。とにかく私はちょうど上記のDotNetZipで私の問題を解決しました。 – cotaku39

+0

dotnetzipにDeflateStreamクラスとZlibStreamクラスがあるようです。 DeflateStreamを使用している場合、サーバは生の収縮データを(間違って)返します。 ZlibStreamを使用している場合、サーバーはzlibでラップされたデフレートデータを(正しく)返しています。私のポイントは、あなたのコードが一般的であること、zlibを試してみてください。それがうまくいかなければ、収縮を試みてください。 –

+0

@ MarkAdler、.NET 4.5以降、DeflateStreamは内部的にzlibを使用します。 – Annie

関連する問題