2012-07-02 2 views
0

DEFLATE 알고리즘을 통과 한 일부 데이터가 있습니다. perl -MCompress::Zlib -e 'undef $/; print uncompress(<>)' < deflated_data.gz 올바른 출력이 인쇄됩니다. 그러나 같은 데이터에서 다음 코드를 사용하면 데이터를 부풀려 시도 할 때 InvalidDataException이 표시됩니다. INFLATE가 구현되어 데이터가 올바르지 않은 곳이 표시됩니까?DEFLATED 데이터의 유효성 확인

public byte[] Inflate(byte[] inputData) 
    { 
     using (Stream input = new DeflateStream(new MemoryStream(inputData), 
               CompressionMode.Decompress)) 
     { 
      using (MemoryStream output = new MemoryStream()) 
      { 
       input.CopyTo(output); 
       return output.ToArray(); 
      } 
     } 
    } 
+0

[GZip을 사용하는 예외] 가능한 복제본 (http://stackoverflow.com/questions/11271282/exception-using-gzip) –

+0

이것은 중복되지 않습니다. GZip 및 Deflate의 데이터 형식에는 차이가 있습니다. – cytinus

답변

3

이것은 호환성 문제는 아니지만 사용자가 이해하는 형식입니다. deflate (원시 압축 된 데이터), zlib (zlib 헤더 및 트레일러에 래핑 된 데이터 압축) 및 gzip (gzip 헤더 및 트레일러에 래핑 된 데이터 압축)의 세 가지 형식이 있습니다. 그들은 각각 RFC 1951, RFC 1950RFC 1952에 문서화되어 있습니다.

Compress :: Zlib uncompress() 함수는 properly documented이고 uncompress()가 zlib (RFC 1950) 스트림을 예상하고 있음을 나타냅니다. .NET DeflateStream 클래스도 properly documented이며 원시 deflate 스트림 (RFC 1951)을 기대합니다.

"DEFLATE 알고리즘을 통과 한 데이터가 있습니다"라고 말하면 실제로는 zlib (RFC 1950) 형식으로 압축 된 것이지 수축되지 않은 형식입니다.