Mik*_*ail 15 .net c# deflatestream
我需要压缩和解压缩字符串
这是代码:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
和
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());
}
}
Run Code Online (Sandbox Code Playgroud)
似乎UnZipStr方法中存在错误.有人能帮助我吗?
Phi*_*oss 29
有两个不同的问题.首先,ZipStr你需要冲洗或关闭StreamWriter并关闭DeflateStream之前从中读取MemoryStream.
其次,在UnZipStr,你正在从压缩的字节构造你的结果字符串inputStream.你应该返回结果reader.ReadToEnd().
在StreamWriter和 StreamReader构造函数中指定字符串编码也是一个好主意.
请尝试以下代码:
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();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)