使用GZip压缩字符串,字符串不短

时间:2014-10-22 11:28:59

标签: c# asp.net .net

我使用以下代码压缩字符串,但字符串不短。你能解释一下原因吗?

  private string Compress(string str)
        {
            try
            {
                String returnValue;
                byte[] buffer = Encoding.ASCII.GetBytes(str);
                using (MemoryStream ms = new MemoryStream())
                {
                    using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
                    {
                        zip.Write(buffer, 0, buffer.Length);
                        using (StreamReader sReader = new StreamReader(ms, Encoding.ASCII))
                        {
                            returnValue = sReader.ReadToEnd();
                        }
                    }

                }
                return returnValue;                
            }
            catch
            {
                return str;
            }
        }

1 个答案:

答案 0 :(得分:1)

忽略代码中的问题 - 发生这种情况时有多种可能的情况。

压缩算法的简化说明 - 压缩是基于这样一个事实,即您尝试压缩的数据包含冗余值 - 这些模式可以通过压缩算法识别,并且可以缩短"通过更简洁地表达冗余值。

某些情况下压缩结果可能比输入大:

1)输入太短 - 压缩算法有一些数据开销,考虑到短输入,无法有效压缩。因此,压缩机制+原始数据会产生一些数据开销。

2)输入已被压缩 - 再次,压缩算法有一些数据开销,输入何时已经压缩 - 它无法有效压缩它。

3)输入过于随机 - 考虑到输入是由某个随机生成器生成的,压缩算法无法有效地压缩它 - 无法识别模式。