asp.net实现GZip压缩和GZip解压
2015-03-25 10:02
183 查看
最近在开发一个网站doc.115sou.com,使用到了GZip压缩技术,经过多次搜索找到asp.net中用GZip对数据压缩和解压缩非常方便,当我第一次拿到这个类的时候却感觉很迷茫,无从下手。主要是因为GZipStream的构造函数中第一个需要传入一个Stream,第二个是指定操作方式:压缩还是解压缩。
当时的疑问点主要有:
我传入的Stream是包含未压缩数据的Stream吗?
我解压时是从一个压缩流中读取数据后再用GZipStream解压吗?
出现以上两点疑问,完全是我将GZipStream的用法理解反了。
其实GZipStream里面存的是已经压缩过的数据流,传入的Stream是作为基础Stream传入,如果要压缩,那你就可以传一个空的Stream进去,如果要解压,就将包含压缩数据的Stream传进去。
而GZipStream的读和写分别对应的是解压和压缩两个操作,知道了这些,使用起来就简单了。
写入的数据会被压缩后写入到传入的Stream中,读取的数据也是解压后的数据,可以直接写入到一个新的流中。
当时的疑问点主要有:
我传入的Stream是包含未压缩数据的Stream吗?
我解压时是从一个压缩流中读取数据后再用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())); }
相关文章推荐
- asp.net 实现文件的压缩和解压
- Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)
- 实现asp.net的文件压缩、解压、下载
- [Asp.net]ZipHelper 在线压缩解压帮助类(SharpZipLib组件实现)
- Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)
- Asp.net 2.0 C#实现压缩/解压功能
- Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)
- asp.NET中实现文件的压缩和解压(3种方式)
- 实现asp.net的文件压缩、解压、下载
- Asp.net 2.0 C#实现压缩/解压功能 (示例代码)
- Asp.net 2.0 C#实现压缩/解压功能 [转=向作者‘肖相’无私共享精神致敬]
- Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)
- Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)
- [导入]Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)
- 【摘录】Asp.net实现在线压缩与解压
- Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)
- Asp.net 2.0 C#实现压缩/解压功能
- C#/ASP.NET/WinForm 通过ICSharpCode.SharpZipLib.dll实现文件夹、文件的压缩与解压
- 转载:Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志