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

.net 使用GzipStream时,如何确定缓冲区的大小?,.net,gzipstream,.net,Gzipstream,我正在尝试解压GZipStream。问题是流上的“Length”属性抛出了一个“NotSupported”异常。当我从流中读取字节时,如何知道缓冲区的大小?由于它是压缩的,我不知道未压缩的版本会有多大。有什么建议吗?你为什么需要这些建议 public static byte[] Decompress(this byte[] data) { var ms = new MemoryStream(data); var s = new GZipStream(ms, CompressionMode

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

你为什么需要这些建议

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();
}
你为什么需要这个

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();
}

根据要使用它执行的操作,可以将未压缩的内容写入MemoryStream或FileStream。它们都可以设置为根据需要扩展缓冲区


MemoryStream还有一个ToArray方法,可以将其内容提取为字节数组。

根据要使用它执行的操作,可以将未压缩的内容写入MemoryStream或文件流。它们都可以设置为根据需要扩展缓冲区


MemoryStream还有一个ToArray方法,可以将其内容提取为字节数组。

我对这个示例有点纠结。我有一个HttpResponseStream,它是gzip,我如何在这种情况下使用它?我想出来了。我必须先将所有字节读入内存流,就像在解压例程中一样,然后将这些字节传入内存流。谢谢屏幕抓取很糟糕。与其从
data
构建
ms
MemoryStream,不如将HttpResponseStream传递到GZipStream实例中,我认为。我在这个示例中遇到了一些麻烦。我有一个HttpResponseStream,它是gzip,我如何在这种情况下使用它?我想出来了。我必须先将所有字节读入内存流,就像在解压例程中一样,然后将这些字节传入内存流。谢谢屏幕抓取很糟糕。我认为,您只需将HttpResponseStream传入GZipStream实例,而不是从
数据构建
ms
MemoryStream。