Есть ли способ установить уровень сжатия при использовании System.IO.Compression.GZipStream - PullRequest
5 голосов
/ 27 июня 2011

Можно ли установить уровень сжатия при использовании .NET GZipStream для сжатия потока? Кажется, у Ionic Zip есть конструктор для этого, но я бы не стал использовать библиотеку только для того, чтобы получить эту функцию.

Ответы [ 2 ]

3 голосов
/ 27 июня 2011

Я бы не сказал, что это невозможно, но основываясь на моем обзоре MSDN Я бы сказал, что он определенно не поддерживается "из коробки".

Я думаю, что ихОбъяснение этому суммируется следующим образом:

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

В этой публикации говорится, что внутренне по умолчанию используется уровень 3, и что у него есть опции (опять же, внутренне) для поддержки изменения уровня сжатия, но этоэто не разоблачено.

2 голосов
/ 26 ноября 2018

Начиная с .NET 4.5, перечисление CompressionLevel было добавлено в пару конструкторов для GZipStream.

Доступны следующие опции:

CompressionLevel.Optimal = 0
CompressionLevel.Fastest = 1
CompressionLevel.NoCompression = 2

Итак, теперь вы можетесоздайте GZipStream, передав CompressionLevel, который определяет степень сжатия данных.

using (GZipStream compressionStream = new GZipStream(stream, CompressionLevel.Optimal))
{
    // ...
}

Более подробная информация доступна в GZipStream документации или CompressionLevel документация .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...