Я пытаюсь распаковать GZipStream. Проблема в том, что свойство «Длина» в потоке генерирует исключение «NotSupported». Как узнать, какой размер сделать мой буфер, когда я читаю байты из потока? Поскольку он сжат, я не знаю, насколько велика будет несжатая версия. Какие-либо предложения?Как определить, насколько большой размер моего буфера при использовании GzipStream?
0
A
ответ
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
В зависимости от того, что вы собираетесь с ним делать, вы можете записать несжатое содержимое в MemoryStream или FileStream. Они могут быть настроены для расширения своих буферов по мере необходимости.
В MemoryStream также есть метод ToArray, который извлекает его содержимое в виде байтового массива.
+1 для примера :-) –
Я немного борюсь с этим примером. У меня есть HttpResponseStream, который gzipped, как я могу использовать это в этом контексте? – Micah
Я понял. Мне пришлось сначала прочитать все байты в потоке памяти так же, как вы делаете в подпрограмме распаковки, а затем передать эти байты. Спасибо! Скребок экрана отстой. – Micah