Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用GZip压缩字符串,该字符串不会更短_C#_Asp.net_.net - Fatal编程技术网

C# 使用GZip压缩字符串,该字符串不会更短

C# 使用GZip压缩字符串,该字符串不会更短,c#,asp.net,.net,C#,Asp.net,.net,我使用了下面的代码来压缩字符串,但是字符串并不更短。你能解释一下原因吗 private string Compress(string str) { try { String returnValue; byte[] buffer = Encoding.ASCII.GetBytes(str); using (MemoryStream ms

我使用了下面的代码来压缩字符串,但是字符串并不更短。你能解释一下原因吗

  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) 输入太短-压缩算法有一定的数据开销,考虑到输入太短,无法有效压缩。因此,压缩机制+原始数据会带来一些数据开销

2) 输入已经被压缩——同样,压缩算法有一些数据开销,当输入已经被压缩时——它无法有效压缩


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

输入是什么,输出是什么?你有没有碰巧落在捕鼠区?您调试过吗?您是否尝试过删除
catch
块以查看您的代码是否自动失败?一般来说,永远不要写
catch{}
——即使
catch(Exception ex){log(ex)}
稍微好一点,尽管通常仍然太宽。为什么要像读取ASCII字符串一样读取内存流(二进制)的内容?这将使输出无法恢复。直接的问题是,您正在尝试读取缓冲区的内容,而
GZipStream
尚未刷新--请使用
块将最里面的
移到更高一级以解决此问题。但这仍然不能解决代码没有达到您真正想要的目标的问题,那么您真正想要的是什么?您是否使用短输入字符串进行测试?Zip添加了一个前导(查找表),它可以使短输入字符串在“压缩”后变得更长。使用更长的输入字符串进行测试。