2010-10-22 75 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