首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IO.Compression有问题吗?

IO.Compression有问题吗?
EN

Stack Overflow用户
提问于 2011-02-12 07:45:30
回答 3查看 1.2K关注 0票数 3

我刚刚开始使用以下代码在VB.Net中压缩文件。因为我的目标是FX2.0,所以我不能使用Stream.CopyTo方法。

然而,与7-zip中的gzip Normal压缩配置文件相比,我的代码给出了非常差的结果。例如,我的代码将一个630MB的outlook存档压缩到740MB,而7-zip压缩为490MB。

下面是代码。有没有一个明显的错误(还是很多?)

代码语言:javascript
复制
Using Input As New IO.FileStream(SourceFile, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read)
    Using outFile As IO.FileStream = IO.File.Create(DestFile)
        Using Compress As IO.Compression.GZipStream = New IO.Compression.GZipStream(outFile, IO.Compression.CompressionMode.Compress)
            'TODO: Figure out the right buffer size.'
            Dim Buffer(524228) As Byte
            Dim ReadBytes As Integer = 0

            While True
                ReadBytes = Input.Read(Buffer, 0, Buffer.Length)
                If ReadBytes <= 0 Then Exit While
                Compress.Write(Buffer, 0, ReadBytes)
            End While
        End Using
    End Using
End Using

我尝试过不同大小的缓冲区,但我得到了相似的压缩时间和完全相同的压缩比。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-12 08:01:00

编辑,或者实际重写:看起来BCL的程序员决定使用phone it in

ASCII2.0版中的实现使用针对纯System.dll文本优化的statically defined, hardcoded Huffman trees,而不是像其他实现那样自适应地生成霍夫曼树。它也不支持存储块优化(这是标准的GZip/Deflate避免失控扩展的方式)。因此,通过它们的实现运行除纯文本之外的任何类型的文件都将产生比输入大得多的文件,并且Microsoft claims this is by design!

省点苦头,拿个third party implementation吧。

票数 5
EN

Stack Overflow用户

发布于 2011-02-12 07:56:27

IO.Compression并不是真正为我们设计的。它是为支持XPS或XML纸张规范而创建的。目前,如果你想要像样的文件压缩,你必须使用第三方库。

票数 1
EN

Stack Overflow用户

发布于 2013-04-14 08:21:43

一些可能有用的附加信息。我正在压缩一些静态文件(二进制)以包含在项目版本中,并且遇到了同样的问题,文件大小随着IO.Compression.GZipStream的增加而增加。

我决定使用Ionic.Zip来代替,在那里可以使用最好的压缩。

我立即注意到的一件事是,尽管Ionic.Zip将我的文件减少到原始大小的25%,压缩操作大约慢了3-4倍(完全在意料之中),但解压缩过程也慢了3倍,这使得解压缩花费了1.6秒而不是0.5秒。

由于GZipStream是一个标准,尽管.NET中内置的IO.Compression.GZipStream压缩空间效率要低得多,但它的解压缩速度要快得多。

因此,在生产环境中,我使用"ZLib.GZipStream“对文件进行压缩,使用"IO.Compression.GZipStream”对文件进行解压( Ionic.Zip )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4975182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档