zoukankan      html  css  js  c++  java
  • asp.net实现GZip压缩和GZip解压

    最近在开发一个网站doc.115sou.com,使用到了GZip压缩技术,经过多次搜索找到asp.net中用GZip对数据压缩和解压缩非常方便,当我第一次拿到这个类的时候却感觉很迷茫,无从下手。主要是因为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, 0, 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, 0, bytes.Length)) > 0)
                            {
                                dms.Write(bytes, 0, len);
                            }
                        }
                    }
                    Console.WriteLine(Encoding.UTF8.GetString(dms.ToArray()));
                }
  • 相关阅读:
    Node.js 调用 restful webservice
    Node.js的集群功能以及在Express的配置
    Node.js 连接mySQL程序
    客户端连接Redis
    缓存的压力测试脚本
    搭建redis集群环境
    编译EXE文件的时候pcap编译不进去。 pyinstaller pcap pypcap 报错
    selenium(五)伪造浏览器
    selenium(四)操作cookie,伪造cookie
    selenium(三)浏览器操作
  • 原文地址:https://www.cnblogs.com/webapi/p/4364841.html
Copyright © 2011-2022 走看看