1

DotNetZip バージョン 1.8.4.5 を使用しています。現時点ではアップグレードできません。

サーバーからクライアント アプリケーションに大きなリストを送信しています。リストを文字列変数 (contentsAsString) にシリアル化しています。次に、contentAsString を MemoryStream に圧縮し、バイト配列をクライアントに返します。圧縮されたバイト配列の長さは 2087188 (1.99 MB) です。

contentsAsString の値を取得してテキスト ファイルに保存すると、ファイルは 1.99 MB になります (上記と同じ)。Windows Compression を使用してテキスト ファイルを圧縮すると、結果の zip ファイルは 132 KB になります。

MemoryStream が 132 KB に圧縮されないのはなぜですか? 私が使用しているコードは次のとおりです。

   private byte[] zipContents<T>(List<T> contents)
    {

        using (Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile())
        {
            using (MemoryStream ms = new MemoryStream())
            {
                string contentsAsString = Utility.SerializeListToString<T>(contents);
                zip.AddEntry("stream.zip", null, contentsAsString);
                zip.Save(ms);
                return ms.ToArray();
            }

        }

    }
4

3 に答える 3

2

GZIP または Deflate 圧縮も適している場合は、.NET Framework (2.0 以降) がストリーム用の GZIP および Deflate 圧縮を提供することに注意してください ( System.IO.Compression名前空間にあります) 。

于 2010-12-08T02:10:36.997 に答える
2

コメントで述べたように、最新の 1.9 バージョンの DotNetZip を使用すると、期待どおりに圧縮されました。テストする 1.8.4.5 が見つからなかったので、アップグレードするのが最善だと思います。

ありがとうございました。

于 2010-12-10T22:22:52.653 に答える
0

こんなかっこいいライブラリは知らなかったのですが、参考文献を見ていたらなんとなく圧縮方法がわかりました。

http://cheeso.members.winisp.net/DotNetZipHelp/html/f52f1f79-0eed-92c8-5938-89ccfc77ca53.htm

それはまったく役に立ちますか?

また、これを見つけました: http://www.java2s.com/Open-Source/CSharp/Development/DotNetZip/Ionic/Zip/Tests/Compatibility.cs.htm

于 2010-12-08T02:00:09.057 に答える