zip and unzip string with Deflate

别说谁变了你拦得住时间么 提交于 2019-12-17 19:33:40

问题


I need to zip and unzip string

Here is code:

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();
       }
}

and

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());
       }
}

It seems that there is error in UnZipStr method. Can somebody help me?


回答1:


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();
            }
        }
    }
}


来源:https://stackoverflow.com/questions/2118904/zip-and-unzip-string-with-deflate

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!