В чем разница между сжатием zlib в gzip и сжатием, используемым в .NET GZipStream? - PullRequest
2 голосов
/ 01 июля 2011

Возникла странная проблема - один из моих наборов приложений должен читать / записывать сжатые gzip файлы, используемые как в Windows, так и в Linux, и я обнаружил, что файлы, которые я генерирую с помощью zlib в Linux, в 2-3 раза большечем те, которые я генерирую, используя GZipStream в Windows.Они отлично читаются на любой платформе, поэтому я знаю, что сжатие правильное независимо от того, на какой платформе был создан файл.Дело в том, что файлы передаются по сети в разное время, и, очевидно, размер файла является проблемой.

Мой вопрос:

  1. Кто-нибудь еще сталкивался с этим
  2. Есть ли документированная разница между ними?Я знаю, что GZipStream не предоставляет способ указать уровень сжатия, как вы можете с zlib, но я использую максимальное сжатие на стороне zlib.Разве я не должен видеть относительно одинаковый размер файла, предполагая, что GZipStream также написан для использования максимального сжатия?

Ответы [ 2 ]

1 голос
/ 28 сентября 2011

И ответ таков: версия Linux никогда не сжимала данные для начала.Потребовалось много отладки, чтобы найти ошибку, вызвавшую ее, но после ее исправления размеры теперь сопоставимы на обеих платформах.

1 голос
/ 01 июля 2011

Я думаю, что причина, по которой вы испытываете это, не из-за используемого алгоритма сжатия, а из-за того, как файлы сжимаются.Из руководства zLib:

"Формат zlib был разработан, чтобы быть компактным и быстрым для использования в памяти и на каналах связи. Формат gzip был разработан для сжатия отдельных файлов в файловых системах, имеетзаголовок большего размера, чем zlib, для хранения информации каталога и использует другой, более медленный метод проверки, чем zlib. "

Я думаю, что происходит то, что файлы на вашем компьютере с linux Tar'red вместе в1 файл, то этот файл сжимается.В Windows я думаю, что он сжимает каждый отдельный файл, а затем сохраняет их сжатыми в 1 файл.

Это моя теория, но мне нечего ее поддерживать.Я подумал, что позже я смогу попробовать несколько пробных тестов дома, просто чтобы заполнить свое любопытство.

...