GZipStream или класс DeflateStream?

Документация MSDN говорит мне следующее:

Класс GZipStream использует gzip формат данных, который включает значение контроля циклическим избыточным кодом для обнаружения повреждения данных. gzip формат данных использует тот же алгоритм сжатия в качестве класса DeflateStream.

Кажется, что GZipStream добавляет некоторые дополнительные данные к выводу (относительно DeflateStream). Я задаюсь вопросом, в том, какой сценарий было бы важно использовать GZipStream и не DeflateStream?

52
задан Aaronaught 8 April 2010 в 08:16
поделиться

2 ответа

Deflate - это просто алгоритм сжатия. GZip - это на самом деле формат.

Если вы используете GZipStream для сжатия файла (и сохраните его с расширением .gz ), результат действительно может быть открыт с помощью архиваторов, таких как WinZip или ] gzip инструмент. Если вы выполните сжатие с помощью DeflateStream , эти инструменты не распознают файл.

Если сжатый файл предназначен для открытия этими инструментами, необходимо использовать GZipStream вместо DeflateStream .

Я также считаю важным, если вы передаете большой объем данных через ненадежный носитель (например, подключение к Интернету) и не используете протокол исправления ошибок, такой как TCP / IP. Например, вы можете передавать данные через последовательный порт, необработанный сокет или UDP. В этом случае вам обязательно понадобится информация CRC, встроенная в формат GZip, чтобы гарантировать правильность данных.

70
ответ дан 7 November 2019 в 09:23
поделиться

Ну, я совершенно ошибся в своем первом ответе. Я просмотрел исходный код 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. Это, конечно, не ответ на ваш вопрос, но, возможно, это немного поможет.

6
ответ дан 7 November 2019 в 09:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: