There are two separate problems. First of all, in ZipStr
you need to flush or close the StreamWriter
and close the DeflateStream
before reading from the MemoryStream
.
Secondly, in UnZipStr
, you're constructing your result string from the compressed bytes in inputStream
. You should be returning the result of reader.ReadToEnd()
instead.
It would also be a good idea to specify the string encoding in the StreamWriter
and StreamReader
constructors.
Try the following code instead:
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();
}
}
}
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…