C#实现GZip压缩和解压缩入门实例

C#实现GZip压缩和解压缩入门实例,第1张

概述主要是因为GZipStream的构造函数中第一个需要传入一个Stream,第二个是指定 *** 作方式:压缩还是解压缩。

主要是因为GZipStream的构造函数中第一个需要传入一个Stream,第二个是指定 *** 作方式:压缩还是解压缩。

当时的疑问点主要有:

1.我传入的Stream是包含未压缩数据的Stream吗?
2.我解压时是从一个压缩流中读取数据后再用GZipStream解压吗?

出现以上两点疑问,完全是我将GZipStream的用法理解反了。

其实GZipStream里面存的是已经压缩过的数据流,传入的Stream是作为基础Stream传入,如果要压缩,那你就可以传一个空的Stream进去,如果要解压,就将包含压缩数据的Stream传进去。

而GZipStream的读和写分别对应的是解压和压缩两个 *** 作,知道了这些,使用起来就简单了。

写入的数据会被压缩后写入到传入的Stream中,读取的数据也是解压后的数据,可以直接写入到一个新的流中。
复制代码 代码如下:

byte[] cbytes = null;
//压缩
            using (MemoryStream CMS = new MemoryStream())
            {
                using (System.IO.Compression.GZipStream gzip = new System.IO.Compression.GZipStream(CMS,System.IO.Compression.CompressionMode.Compress))
                {
                    //将数据写入基础流,同时会被压缩
                    byte[] bytes = EnCoding.UTF8.GetBytes("解压缩测试");
                    gzip.Write(bytes,bytes.Length);
                }
                cbytes = CMS.ToArray();
            }
//解压
            using (MemoryStream dms = new MemoryStream())
            {
                using (MemoryStream CMS = new MemoryStream(cbytes))
                {
                    using (System.IO.Compression.GZipStream gzip = new System.IO.Compression.GZipStream(CMS,System.IO.Compression.CompressionMode.Decompress))
                    {
                        byte[] bytes = new byte[1024];
                        int len = 0;
                        //读取压缩流,同时会被解压
                        while ((len = gzip.Read(bytes,bytes.Length)) > 0)
                        {
                            dms.Write(bytes,len);
                        }
                    }
                }
                Console.Writeline(EnCoding.UTF8.GetString(dms.ToArray()));
            }

同时 在压缩时传入的流可以是非空流,你可以在写入其他数据后再写入压缩数据,不会影响最后的结果。

如果你在解压时遇到“幻数头不正确”的提示,是因为你要解压的数据不是用Gzip压缩的。

总结

以上是内存溢出为你收集整理的C#实现GZip压缩和解压缩入门实例全部内容,希望文章能够帮你解决C#实现GZip压缩和解压缩入门实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1254588.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存