我想解压缩一个压缩字符串,以便字符串变得可用。
我使用函数 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[] 字节,Int32 偏移量, Int32 长度)\r\n 在 System.IO.Compression.DeflateStream.Read(Byte[] 数组, Int32 偏移量, Int32 计数)\r\n
但是,我仍然认为信息是用“放气方法”压缩的。 是否有不同/更好/有效的方式来读取数据并将其解压缩为字符串?