2010-10-19 87 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

相關問題