2009-06-11 3 views
0

GZipStream의 압축을 푸는 중입니다. 문제는 스트림의 길이 속성이 "NotSupported"예외를 throw한다는 것입니다. 스트림에서 바이트를 읽을 때 버퍼를 만들 크기를 어떻게 알 수 있습니까? 압축 되었기 때문에 압축되지 않은 버전이 얼마나 큰지는 알 수 없습니다. 어떤 제안?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

저는이 예제를 조금 고민하고 있습니다. 내가 그 상황에서 이것을 어떻게 사용합니까 gzip 된 HttpResponseStream을 가지고 있습니까? – Micah

+0

나는 그것을 이해했다. 압축 해제 루틴에서와 마찬가지로 메모리 스트림에 모든 바이트를 먼저 읽은 다음 그 바이트를 전달해야했습니다. 감사합니다! 스크린 스크래핑은 짜증나. – Micah

0

당신이 무엇을 할 것인지에 따라 압축되지 않은 내용을 MemoryStream 또는 FileStream에 쓸 수 있습니다. 그들은 둘 다 필요에 따라 버퍼를 확장하도록 설정할 수 있습니다.

또한 MemoryStream에는 내용을 바이트 배열로 추출하는 ToArray 메서드가 있습니다.

관련 문제