使用 Deflate 压缩和解压字符串

问题描述 投票:0回答:1

我需要压缩和解压字符串

这是代码:

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 方法似乎有错误。有人可以帮助我吗?

c# .net deflatestream
1个回答
33
投票

有两个独立的问题。首先,在

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();
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.