Поделиться через


BrotliStream больше не разрешает неопределенные значения CompressionLevel

Конструкторы BrotliStream, которые принимают CompressionLevel аргумент, больше не допускают значения, не определенные в CompressionLevel перечислении. Если передать недопустимое значение, выбрасывается исключение ArgumentException.

Предыдущее поведение

BrotliStream позволяет передать произвольный уровень сжатия конструктору путем приведения требуемого уровня непосредственно к CompressionLevel. Рассмотрим пример.

BrotliStream brotli = new BrotliStream(baseStream,
                                       (CompressionLevel)5); // Use level 5

Тем не менее, если был предоставлен произвольный уровень, который был передан через as-is базовой библиотеке, что приводит к несогласованности и потенциально неожиданному поведению.

Новое поведение

BrotliStream допускает только значения, определенные в CompressionLevel. Если вы передаете неопределенное значение в конструктор, возникает ArgumentException исключение.

Представленная версия

.NET 7

Тип разрушающего изменения

Это изменение может повлиять на совместимость двоичных файлов.

Причина изменения

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

Если был предоставлен произвольный уровень, который был передан через as-is базовой библиотеке, что приводит к несогласованности и потенциально неожиданному поведению. При этом изменении поведение соответствует другим потокам сжатия, например DeflateStream.

При новой настройке значений CompressionLevel и добавлении CompressionLevel.SmallestSizeтеперь можно иметь различные компромиссы в алгоритмах сжатия. Пользователи могут продолжать полагаться на значения CompressionLevel, так как они являются абстракциями таких компромиссов.

Если вы полагаетесь на передачу неопределенных значений в параметре CompressionLevel, пересмотрите ваш случай использования и определите, какое документированное значение является наиболее оптимальным для него.

Затронутые API