【发布时间】:2022-07-12 23:51:14
【问题描述】:
这是来自实际项目的代码,用于问题,所以一些数据是硬编码的:
static void Main(string[] args)
{
Console.WriteLine("Starting. " + Environment.Version);
using (var stream = new FileStream(@"stream_test.txt", FileMode.Open))
{
stream.Position = 0;
// .NET implements Deflate (RFC 1951) but not zlib (RFC 1950),
// so we have to skip the first two bytes.
stream.ReadByte();
stream.ReadByte();
var zipStream = new DeflateStream(stream, CompressionMode.Decompress, true);
// Hardcoded length from real project. In the previous .Net versions this is size of final result
long bytesToRead = (long)262 * 350;
var buffer = new byte[bytesToRead];
int bytesWereRead = zipStream.Read(buffer, 0, (int)bytesToRead);
if (bytesWereRead != bytesToRead)
{
throw new Exception("ZIP stream was not fully decompressed.");
}
Console.WriteLine("Ok");
Console.ReadKey();
}
}
解压缩问题不会出现在每个流上,因此可以在 GitHub 上找到带有项目代码的输入文件。 https://github.com/dimsa/Net6DeflateStreamIssue/tree/main/DeflateStreamTest
这段代码很好在:
- .NET Framework(在 2.0、3.5、4 上测试过)
- .NET 标准 2.1 和
- .NET 5
.NET 6 失败。 Net 6中解压后的数据长度不正确。
是否有任何解决方法,或者应该使用其他压缩库?
【问题讨论】:
-
您是否向 dotnet 团队报告了此错误?看来您已经对此问题进行了相当多的调查,但是这可能是请求修复的错误地方。
-
@PMF 看起来 MS 知道这个问题。答案有指向官方评论的链接。谢谢。
标签: c# compression .net-6.0