1

我使用的是 DotNetZip 1.8.4.5 版。我目前无法升级。

我正在从我的服务器向我的客户端应用程序发送一个大列表。我正在将我的列表序列化为一个字符串变量(contentsAsString)。然后我将 contentsAsString 压缩到 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 回答