[英]C# compression and Delphi decompression
我有一些使用 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 壓縮文件?
顯然,Delphi deflate 算法的默認設置需要 zlib 標頭,而 C# deflate 代碼創建“原始”壓縮流。 以這種方式設置解壓縮流(WindowBits 使用 -ve 值)允許 Delphi 解壓縮 C# 壓縮數據。
DecompressionStream := TZDecompressionStream.Create(FBlobStream, -15);
根據官方文檔:
WindowBits 參數確定緩沖區處理。 零表示 zlib 標頭以確定緩沖區大小。 8 到 15 之間的值設置緩沖區大小,負值表示原始處理,加上 16 會強制進行 gzip 處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.