使用Deflate压缩和解压字符串

9 浏览
0 Comments

使用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方法中存在错误。有人可以帮我吗?

0
0 Comments

这个问题的出现原因是因为在代码中存在两个问题。首先,在`ZipStr`方法中,在从`MemoryStream`中读取之前,需要刷新或关闭`StreamWriter`并关闭`DeflateStream`。

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

`ZipStr`方法也存在问题,我已经更新了我的回答。

非常感谢,但我有一个问题。如何使用TPL实现多线程?

0