我正在尝试解压缩GZipStream。问题是流上的“长度”属性抛出“NotSupported”异常。当我从流中读取字节时,如何知道缓冲区的大小?由于它是压缩的,我不知道未压缩版本的大小。有什么建议吗?
答案 0 :(得分:4)
你为什么需要那个?
public static byte[] Decompress(this byte[] data)
{
var ms = new MemoryStream(data);
var s = new GZipStream(ms, CompressionMode.Decompress);
var output = new MemoryStream();
byte[] buffer = new byte[8192];
int read = 0;
while ((read = s.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, read);
}
return output.ToArray();
}
答案 1 :(得分:0)
根据您将要执行的操作,您可以将未压缩的内容写入MemoryStream或FileStream。它们都可以设置为根据需要扩展缓冲区。
MemoryStream还有一个ToArray方法,它将其内容提取为字节数组。