使用Deflate压缩和解压缩字符串

我需要压缩和解压缩字符串

这是代码:

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方法中存在错误。 有人能帮助我吗?

有两个不同的问题。 首先,在ZipStr您需要刷新或关闭StreamWriter并在从MemoryStream读取之前关闭DeflateStream

其次,在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(); } } } }