2009-06-11 1 views
0

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

ответ

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

+1 для примера :-) –

+0

Я немного борюсь с этим примером. У меня есть HttpResponseStream, который gzipped, как я могу использовать это в этом контексте? – Micah

+0

Я понял. Мне пришлось сначала прочитать все байты в потоке памяти так же, как вы делаете в подпрограмме распаковки, а затем передать эти байты. Спасибо! Скребок экрана отстой. – Micah

0

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

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