2010-01-22 219 views
11

我需要壓縮和解壓縮串壓縮和解壓字符串減縮

這裏是代碼:

public static byte[] ZipStr(String str) 
{ 
    using (MemoryStream output = new MemoryStream()) 
    using (DeflateStream gzip = new DeflateStream(output, CompressionMode.Compress)) 
    using (StreamWriter writer = new StreamWriter(gzip)) 
     { 
       writer.Write(str); 
       return output.ToArray(); 
     } 
} 

public static string UnZipStr(byte[] input) 
{ 
    using (MemoryStream inputStream = new MemoryStream(input)) 
    using (DeflateStream gzip = new DeflateStream(inputStream, CompressionMode.Decompress)) 
    using (StreamReader reader = new StreamReader(gzip)) 
     { 
     reader.ReadToEnd(); 
     return System.Text.Encoding.UTF8.GetString(inputStream.ToArray()); 
     } 
} 

似乎存在UnZipStr方法錯誤。有人能幫助我嗎?

+4

你得到一個編譯器錯誤,或異常,還是什麼?你能提供關於「錯誤」的更多細節嗎? – Nick 2010-01-22 16:59:13

回答

24

有兩個單獨的問題。首先,在ZipStr中,您需要刷新或關閉StreamWriter並關閉DeflateStream,然後再從MemoryStream讀取。

其次,在UnZipStr中,您正在從inputStream中的壓縮字節構造結果字符串。您應該返回reader.ReadToEnd()的結果。

StreamWriterStreamReader構造函數中指定字符串編碼也是一個好主意。

嘗試下面的代碼來代替:

public static byte[] ZipStr(String str) 
{ 
    using (MemoryStream output = new MemoryStream()) 
    { 
     using (DeflateStream gzip = 
      new DeflateStream(output, CompressionMode.Compress)) 
     { 
      using (StreamWriter writer = 
       new StreamWriter(gzip, System.Text.Encoding.UTF8)) 
      { 
       writer.Write(str);   
      } 
     } 

     return output.ToArray(); 
    } 
} 

public static string UnZipStr(byte[] input) 
{ 
    using (MemoryStream inputStream = new MemoryStream(input)) 
    { 
     using (DeflateStream gzip = 
      new DeflateStream(inputStream, CompressionMode.Decompress)) 
     { 
      using (StreamReader reader = 
       new StreamReader(gzip, System.Text.Encoding.UTF8)) 
      { 
       return reader.ReadToEnd(); 
      } 
     } 
    } 
} 
+0

@Mikhail「ZipStr」也有問題。我已經更新了我的答案。 – 2010-01-22 17:19:49

+0

@PhilRoss非常感謝,但我有一個問題。 如何做到這一點多線程?使用TPL? – IamStalker 2014-04-01 05:18:57