簡體   English   中英

C#壓縮和Delphi解壓

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM