使用GzipStream时,如何确定缓冲区的大小?

时间:2009-06-11 06:22:40

标签: .net gzipstream

我正在尝试解压缩GZipStream。问题是流上的“长度”属性抛出“NotSupported”异常。当我从流中读取字节时,如何知道缓冲区的大小?由于它是压缩的,我不知道未压缩版本的大小。有什么建议吗?

2 个答案:

答案 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方法,它将其内容提取为字节数组。