2010-01-22 45 views
11

tôi cần phải zip và giải nén chuỗizip và giải nén chuỗi với Deflate

Đây là mã:

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()); 
     } 
} 

Dường như có lỗi trong phương pháp UnZipStr. Ai đó có thể giúp tôi được không?

+4

Bạn nhận được một lỗi biên dịch, hoặc một ngoại lệ, hoặc những gì? Bạn có thể cung cấp thêm chi tiết về "lỗi" không? – Nick

Trả lời

24

Có hai vấn đề riêng biệt. Trước hết, trong ZipStr bạn cần phải tuôn ra hoặc đóng StreamWriter và đóng DeflateStream trước khi đọc từ MemoryStream.

Thứ hai, trong UnZipStr, bạn đang xây dựng chuỗi kết quả của mình từ các byte đã nén trong inputStream. Bạn nên trả lại kết quả của reader.ReadToEnd().

Bạn cũng nên chỉ định mã hóa chuỗi trong các nhà thầu StreamWriterStreamReader.

Hãy thử đoạn mã sau thay vì:

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 Đã xảy ra sự cố với 'ZipStr'. Tôi đã cập nhật câu trả lời của mình. –

+0

@PhilRoss Cảm ơn rất nhiều, Nhưng tôi có một câu hỏi. Làm thế nào để làm điều này đa luồng? Sử dụng TPL? – IamStalker

Các vấn đề liên quan