Как определить размер буфера при использовании GzipStream? - PullRequest
1 голос
/ 11 июня 2009

Я пытаюсь распаковать GZipStream. Проблема заключается в том, что свойство «Длина» в потоке вызывает исключение «NotSupported». Как я узнаю, какой размер сделать буфер, когда я читаю байты из потока? Поскольку он сжат, я не знаю, насколько большой будет несжатая версия. Есть предложения?

Ответы [ 2 ]

4 голосов
/ 11 июня 2009

Зачем вам это нужно?

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();
}
0 голосов
/ 11 июня 2009

В зависимости от того, что вы собираетесь с ним делать, вы можете записать несжатый контент в MemoryStream или FileStream. Оба могут быть настроены на расширение своих буферов по мере необходимости.

MemoryStream также имеет метод ToArray, который извлекает его содержимое в виде байтового массива.

...