我想解压缩一个压缩字符串,以便字符串变得可用。
我使用函数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:在解码时找到有效数据;使用stacktrace
at System.IO.Compression.Inflater.DecodeDynamicBlockHeader()\ r \ n at System.IO.Compression.Inflater.Decode()\ r \ n at System.IO.Compression.Inflater.Inflate(Byte [] bytes,Int32 offset, Int32长度)\ r \ n at System.IO.Compression.DeflateStream.Read(Byte []数组,Int32偏移量, Int32计数)\ r \ n
但是,我仍然认为信息是用" deflate方法"压缩的。 是否有不同/更好/工作的方式来读取数据并在字符串中解压缩?
答案 0 :(得分:0)
将字符串压缩到MemoryStream上与将文件压缩为zip或类似文件不同。即使在压缩算法相同的情况下,压缩文件也具有头部,解码器可以使用这些头部来获取信息,不仅是关于压缩本身,还有关于其内部文件的信息。
因此,如果您尝试使用DeflateStream函数对文件进行收缩,则标题将不具有预期的格式,这正是DecodeDynamicBlockHeader错误告诉您的。