2017-01-20 9 views
2

を反映するものではありません。シンプルな短い文字列を渡してもgzipp'edは正しく行われません。例えば"this is a test"は、10個の要素を持つバイト配列になります。[31,139,8,0,0,0,0,0,4,0]もちろん、正しく解凍されません。ここで何がうまくいかないの?これはmsdnからまっすぐに来ました!GZIP形式のコンテンツは、私は非常に単純なのgzipメソッドを持っている入力

+0

の可能性のある重複した[GZipStreamとDeflateStreamすべてのバイト解凍しません]を(http://stackoverflow.com/questions/271260/gzipstream-and-deflatestream-will-not- decompress-all-bytes) –

答えて

1

flushストリームを圧縮して圧縮する必要があります。あなたがmso.ToArray()と呼ぶ時点で、GZipStreamはまだ何も圧縮しておらず、より多くのデータを待っています。

シンプルなソリューション:

public byte[] Compress(string input) 
{ 
    var bytes = Encoding.UTF8.GetBytes(input); 

    using (var msi = new MemoryStream(bytes)) 
    using (var mso = new MemoryStream()) 
    { 
     using (var gz = new GZipStream(mso, CompressionMode.Compress)) 
     { 
      msi.CopyTo(gz); 
     } 

     return mso.ToArray(); 
    } 
} 
+0

ああ、それは確かに問題がある!ありがとう – user3791372

関連する問題