2010-10-19 108 views
3

我使用.Net的GZipStream类来跟踪我正在压缩的文件的原始大小,它看起来像我认为我正在压缩的文件的大小已经增加。那可能吗?GZip压缩(通过.net)可以增加文件大小吗?

这就是我正在做的压缩:

Byte[] bytes = GetFileBytes(file); 

using (FileStream fileStream = new FileStream("Zipped.gz", FileMode.Create)) 
{ 
    using (GZipStream zipStream = new GZipStream(fileStream, CompressionMode.Compress)) 
    { 
     zipStream.Write(bytes, 0, bytes.Length); 
    } 
} 

回答

4

是的,可以。它已经fixed in .NET 4

System.IO.Compression .. ::。DeflateStream和System.IO.Compression .. ::。GZipStream类的压缩算法已得到改进,因此已经压缩的数据不再被夸大。这导致更好的压缩比。此外,压缩流的4千兆字节大小限制已被删除。

检查:GZipStream/DeflateStream increase file size on compression

也检查这里SO:GZipStream and DeflateStream produce bigger files

+0

然而要注意的是,可以压缩一些输入数据也肯定会产生一些其他的输入数据大文件的任何压缩方案(检查皮肯孔原理)。 – gusbro 2010-10-21 19:15:40

+0

是的,原因。基本上任何压缩方案都依赖于数据是多余的,因此可以通过使用特定的编码方案来减少。但这并非总是如此,例如如果您尝试使用随机数据压缩文件或已经使用优质压缩器进行压缩。但原来的问题是关于特定的压缩器实现(而不是压缩算法本身)。良好的压缩器实现可以后备存储文件而不压缩,几乎不会增加其大小。我不认为迈克问结果文件增加到几个标题的字节。 – 2010-10-21 21:29:41