2012-07-02 53 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)格式,而不是壓縮格式。