2010-10-22 41 views
-5

爲什麼我不能在這裏得到這段代碼工作?我想打電話給這個字節數組以前壓縮....反正,它只是返回一個空字符串上...c#gzipstream解壓縮更像是抑鬱症

public static string FromGZipToString(this byte[] source) 
    { 
     using(MemoryStream stream = new MemoryStream()) 
     { 
      stream.Write(source, 0, source.Length); 

      using (var gzipstream = new GZipStream(stream, CompressionMode.Decompress)) 
      using (var reader = new StreamReader(gzipstream)) 
      { 
       return reader.ReadToEnd(); 
      } 
     } 
    } 

這裏順便把壓縮代碼....

public static byte[] ToGZip(this string source) 
    { 
     using(var stream = new MemoryStream()) 
     using(var compressor = new GZipStream(stream, CompressionMode.Compress)) 
     { 
      var bytes = System.Text.UTF8Encoding.UTF8.GetBytes(source); 

      compressor.Write(bytes, 0, bytes.Length); 

      return stream.ToArray(); 
     } 
    } 
+6

你忘了重置MemoryStream的位置嗎? – BrokenGlass 2010-10-22 23:45:55

+0

在寫入無法修復之後重置位置=​​( – Timmerz 2010-10-22 23:49:47

+0

在任何地方丟失刷新? – spender 2010-10-23 00:16:05

回答

5

您的壓縮程序出錯了。在壓縮機關閉(或放置)之前,它不應從流中讀取數據,從而使壓縮機可以將所有字節寫入蒸汽。

看看我對這個問題的回答:compressing and decompressing source data gives result different than source data

+0

它似乎是一個組合表示在加入stream.Seek(0,SeekOrigin.Begin)後;在解壓後寫入 – Timmerz 2010-10-23 00:15:46

+0

或許更好的回答說:你需要在讀取MemoryStream之前沖洗你的壓縮器 – spender 2010-10-23 00:17:04

+0

不,flush不起作用... – Timmerz 2010-10-23 00:22:40