[英]C# DeflateStream.Read() giving an InvalidDataException
我想解壓縮一個壓縮的字符串,以便字符串可以使用。
我使用WebClient.DownloadData(String)函數成功地以字節數組的形式提取了下載文件的內容。
字符使用deflate方法進行邏輯壓縮,因為當我下載文件(擴展名不同)時,7-Zip會提供此信息:
因此,我應該使用DeflateStream類通過函數Read(byte [] array,int offset,int count)來解碼字符串。 讀取MemoryStream。
我使用可以在網上找到的簡單功能:
public string UnzipString2(byte[] byteArrayCompressedContent)
{
try
{
using (var memoryStream = new MemoryStream())
{
int dataLength = BitConverter.ToInt32(byteArrayCompressedContent, 0);
memoryStream.Write(byteArrayCompressedContent, 4, byteArrayCompressedContent.Length - 4);
memoryStream.Position = 0;
var buffer = new byte[dataLength];
using (var deflateStream = new DeflateStream(memoryStream, System.IO.Compression.CompressionMode.Decompress))
{
deflateStream.Read(buffer, 0, buffer.Length);
deflateStream.Close();
}
return Encoding.UTF8.GetString(buffer);
}
}
catch (Exception e)
{
return "";
}
}
當我們調用Read()函數時,它給出一個InvalidDataException:解碼時在有效數據中找到; 與堆棧跟蹤
位於System.IO.Compression.Inflater.DecodeDynamicBlockHeader()\\ r \\ n位於System.IO.Compression.Inflater.Decode()\\ r \\ n位於System.IO.Compression.Inflater.Inflate(Byte [] bytes,Int32 offset ,Int32長度)\\ r \\ n在System.IO.Compression.DeflateStream.Read(Byte []數組,Int32偏移量,Int32計數)\\ r \\ n
但是,我仍然認為信息是使用“放氣方法”壓縮的。 是否有其他/更好/可行的方式來讀取數據並將其解壓縮為String?
將字符串壓縮到MemoryStream上與將文件壓縮為zip或類似方法不同。 即使在壓縮算法相同的情況下,壓縮文件也具有標頭,解碼器可以使用這些標頭來獲取信息,這些信息不僅涉及壓縮本身,還涉及其中的文件。
因此,如果您嘗試使用DeflateStream函數縮小文件,則標頭將不會具有預期的格式,這正是DecodeDynamicBlockHeader錯誤告訴您的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.