BrotliStream 不再允许未定义的 CompressionLevel 值

采用 CompressionLevel 参数的 BrotliStream 构造函数不再允许 CompressionLevel 枚举中未定义的值。 如果传递了无效值,会引发 ArgumentException

旧行为

在过去,BrotliStream 允许通过直接将所需级别强制转换为 CompressionLevel 来将任意压缩级别传递给构造函数。 例如:

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

但是,如果提供了任意级别,则会按原样传递到基础库,从而导致不一致和潜在的意外行为。

新行为

BrotliStream 仅允许 CompressionLevel 中已定义的值。 如果将未定义的值传递给构造函数,会引发 ArgumentException

引入的版本

.NET 7

中断性变更的类型

此项更改可能会影响二进制兼容性

更改原因

CompressionLevel 枚举的目的是让开发人员使用压缩算法,而无需了解其优化参数的含义。

如果提供了任意级别,则会按原样传递到基础库,从而导致不一致和潜在的意外行为。 通过此更改,行为与其他压缩流(例如 DeflateStream)保持一致。

通过对 CompressionLevel 值进行新的优化并添加 CompressionLevel.SmallestSize,现可在压缩算法中进行各种权衡。 用户可继续依赖 CompressionLevel 值作为此类权衡的抽象。

如果你依赖于将未定义的值作为 CompressionLevel 传递,请重新访问你的用例,并确定已记录的哪个值最适合该用例。

受影响的 API