Документация MSDN говорит мне следующее:
Класс GZipStream использует gzip формат данных, который включает значение контроля циклическим избыточным кодом для обнаружения повреждения данных. gzip формат данных использует тот же алгоритм сжатия в качестве класса DeflateStream.
Кажется, что GZipStream добавляет некоторые дополнительные данные к выводу (относительно DeflateStream). Я задаюсь вопросом, в том, какой сценарий было бы важно использовать GZipStream и не DeflateStream?
Deflate - это просто алгоритм сжатия. GZip - это на самом деле формат.
Если вы используете GZipStream
для сжатия файла (и сохраните его с расширением .gz
), результат действительно может быть открыт с помощью архиваторов, таких как WinZip или ] gzip
инструмент. Если вы выполните сжатие с помощью DeflateStream
, эти инструменты не распознают файл.
Если сжатый файл предназначен для открытия этими инструментами, необходимо использовать GZipStream
вместо DeflateStream
.
Я также считаю важным, если вы передаете большой объем данных через ненадежный носитель (например, подключение к Интернету) и не используете протокол исправления ошибок, такой как TCP / IP. Например, вы можете передавать данные через последовательный порт, необработанный сокет или UDP. В этом случае вам обязательно понадобится информация CRC, встроенная в формат GZip, чтобы гарантировать правильность данных.
Ну, я совершенно ошибся в своем первом ответе. Я просмотрел исходный код Mono и обнаружил, что класс GZipStream фактически перенаправляет свои вызовы чтения / записи (и почти любые другие) на соответствующие вызовы методов внутреннего объекта DeflateStream:
public override int Read (byte[] dest, int dest_offset, int count)
{
return deflateStream.Read(dest, dest_offset, count);
}
public override void Write (byte[] src, int src_offset, int count)
{
deflateStream.Write (src, src_offset, count);
}
Единственная разница в том, что он всегда создает объект DeflateStream с флагом gzip, установленным в значение true. Это, конечно, не ответ на ваш вопрос, но, возможно, это немного поможет.