• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#实现GZip压缩和解压缩入门实例

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c#gzip,gzip,gzip解压,gzip压缩,gzip文件怎么打开等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

主要是因为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()));
            }
</div>

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

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#实现页面GZip或Deflate压缩的方法
  • C#实现解压GZip文件的方法
  • C#实现GZip压缩和解压缩入门实例

相关文章

  • 2017-05-28C#实现微信公众号群发消息(解决一天只能发一次的限制)实例分享
  • 2017-05-28C#缓存之SqlCacheDependency用法实例总结
  • 2017-05-28C#静态变量与实例变量实例分析
  • 2017-05-28c#判断email地址是否为合法
  • 2017-05-28C#加密算法汇总(推荐)
  • 2017-05-28C#中Array与ArrayList用法及转换的方法
  • 2017-05-28C#启动外部程序的几种常用方法汇总
  • 2017-05-28C#运算符重载用法实例分析
  • 2017-05-28C#对多个集合和数组的操作方法(合并,去重,判断)
  • 2017-05-28C#实现的Windows剪贴板监视器功能实例【附demo源码下载】

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#基础之泛型
    • C#实现DataTable映射成Model的方法(附源码)
    • winform创建不规则窗体的方法
    • c# 中 DBNull.Value和Null 区别
    • C# Base 64 编码/解码实现代码
    • C# List<T>的用法小结
    • C# TextBox 扩展方法数据验证详细说明
    • C#实现通过模板自动创建Word文档的方法
    • WinForm自定义函数FindControl实现按名称查找控件
    • 磁盘配额的wmi版本(C#)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有