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

+0

Да, из-за причины. В основном любая схема сжатия основана на том факте, что данные являются избыточными, поэтому их можно уменьшить за счет использования конкретных схем кодирования. Но это не всегда так, например. если вы попытаетесь сжать файл со случайными данными в нем или уже скомпилированы с хорошим компрессором. Но исходный вопрос касался конкретной реализации компрессора (а не самого алгоритма сжатия). Хорошая компрессионная герметизация может отбросить, чтобы сохранить файл без сжатия, так что почти не увеличивая его размер. Я не думаю, что Майк спрашивает о том, что файлы результатов увеличены до нескольких байтов заголовка. –

 Смежные вопросы

  • Нет связанных вопросов^_^