源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-08-09 13:57 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C#实现GZip压缩和解压缩入门实例
主要是因为GZipStream的构造函数中第一个需要传入一个Stream,第二个是指定操作方式:压缩还是解压缩。 当时的疑问点主要有: 1.我传入的Stream是包含未压缩数据的Stream吗? 2.我解压时是从一个压缩流中读取数据后再用GZipStream解压吗? 出现以上两点疑问,完全是我将GZipStream的用法理解反了。 其实GZipStream里面存的是已经压缩过的数据流,传入的Stream是作为基础Stream传入,如果要压缩,那你就可以传一个空的Stream进去,如果要解压,就将包含压缩数据的Stream传进去。 而GZipStream的读和写分别对应的是解压和压缩两个操作,知道了这些,使用起来就简单了。 写入的数据会被压缩后写入到传入的Stream中,读取的数据也是解压后的数据,可以直接写入到一个新的流中。
[u]复制代码[/u] 代码如下:
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()));             }
同时 在压缩时传入的流可以是非空流,你可以在写入其他数据后再写入压缩数据,不会影响最后的结果。 如果你在解压时遇到“幻数头不正确”的提示,是因为你要解压的数据不是用GZip压缩的。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部