zip and unzip string with Deflate

前端 未结 1 1943
时光取名叫无心
时光取名叫无心 2020-12-10 12:04

I need to zip and unzip string

Here is code:

public static byte[] ZipStr(String str)
{
    using (MemoryStream output = new MemoryStream())
    usin         


        
相关标签:
1条回答
  • 2020-12-10 12:34

    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();
                }
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题