0

我有一些使用 C# DeflateStream 类压缩的文件,如下所示:

using (DeflateStream compressionStream = new DeflateStream(compressedFileStream, CompressionMode.Compress))

没什么花哨的,所有的默认值。它使用等效的 C# DeflateStreamCode 解压缩很好,即

using (DeflateStream decompressionStream = new DeflateStream(originalFileStream, CompressionMode.Decompress))

但我需要使用 Delphi 解压缩它。我已经尝试过 zlib 库(XE8,XE10.3),类似以下内容:

InStream := TMemoryStream.Create;
InStream.LoadFromFile('F:\mycompressedfile.x');
DecompressionStream := TDecompressionStream.Create(InStream);
OutStream := TMemoryStream.Create;
OutStream.LoadFromStream(DecompressionStream);
OutStream.SaveToFile('F:\mydecompressedfile.x');

但不断收到“数据错误”消息。如何解压缩 C# DeflateStream 压缩文件?

4

1 回答 1

2

显然,Delphi deflate 算法的默认设置需要 zlib 标头,而 C# deflate 代码创建“原始”压缩流。以这种方式设置解压缩流(WindowBits 使用 -ve 值)允许 Delphi 解压缩 C# 压缩数据。

DecompressionStream := TZDecompressionStream.Create(FBlobStream, -15);

根据官方文档

WindowBits 参数确定缓冲区处理。零表示 zlib 标头确定缓冲区大小。8 到 15 之间的值设置缓冲区大小,负值表示原始处理,添加到 16 会强制 gzip 处理。

于 2020-11-22T16:07:58.140 回答