GZipStream 压缩与解压数据

简介:此类表示 GZip 数据格式,它使用无损压缩和解压缩文件的行业标准算法。这种格式包括一个检测数据损坏的循环冗余校验值。GZip 数据格式使用的算法与 DeflateStream 类的算法相同,但它可以扩展以使用其他压缩格式。这种格式可以通过不涉及专利使用权的方式轻松实现。gzip 的格式可以从 RFC 1952“GZIP file format specification 4.3(GZIP 文件格式规范 4.3)GZIP file format specification 4.3(GZIP 文件格式规范 4.3)”中获得。此类不能用于压缩大于 4 GB 的文件

            var list = new List<dataSource>();
            for (int i = 0; i < 1000; i++)
            {
                list.Add(new dataSource { lemmaId = i.ToString(), pic = "图片问题" + i, title = $"这是第{i}条数据", url = "http://www.baidu.com" });
            }

            //进行压缩数据
            MemoryStream responseStream = new MemoryStream();
            using (GZipStream compressedStream = new GZipStream(responseStream, CompressionMode.Compress, true))
            {
                MemoryStream st = new MemoryStream(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(list)));
                Console.WriteLine($"原始数据长度为={st.Length}"+ "\r\n\r\n");
                byte[] buffer = new byte[st.Length];
                int checkCounter = st.Read(buffer, 0, buffer.Length);
                if (checkCounter != buffer.Length) throw new ApplicationException();
                compressedStream.Write(buffer, 0, buffer.Length);
            }
            responseStream.Position = 0;
            var kk = responseStream;
            var txt = Encoding.UTF8.GetString(kk.ToArray());
            Console.WriteLine($"压缩后数据长度为={responseStream.Length},压缩结果为={txt}"+"\r\n\r\n");

            //解压数据
            MemoryStream source = new MemoryStream();
            using (GZipStream gs = new GZipStream(kk, CompressionMode.Decompress, true))
            {
                //从压缩流中读出所有数据
                byte[] bytes = new byte[4096];
                int n;
                while ((n = gs.Read(bytes, 0, bytes.Length)) != 0)
                {
                    source.Write(bytes, 0, n);
                }
            }
            var txt1 = Encoding.UTF8.GetString(source.ToArray());
            Console.WriteLine($"解压后数据长度为={source.Length},压缩结果为={txt1}" + "\r\n\r\n");

结果:

 

posted @ 2017-04-24 11:26  逍遥帝君  阅读(1664)  评论(0编辑  收藏  举报