手机
当前位置:查字典教程网 >编程开发 >C#教程 >C#实现GZip压缩和解压缩入门实例
C#实现GZip压缩和解压缩入门实例
摘要:主要是因为GZipStream的构造函数中第一个需要传入一个Stream,第二个是指定操作方式:压缩还是解压缩。当时的疑问点主要有:1.我传...

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

}

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

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

【C#实现GZip压缩和解压缩入门实例】相关文章:

C#的XML两种代码注释实例说明

c#实现sunday算法实例

c# 获得局域网主机列表实例

C#控制台带参数程序源码编写实例讲解

C#实现任意数据类型转成json格式输出

C#中关于zip压缩解压帮助类的封装 附源码下载

C# 对XML操作入门实例

服务器端C#实现的CSS解析器

使用C#实现在屏幕上画图效果的代码实例

C#实现微信公众号群发消息(解决一天只能发一次的限制)实例分享

精品推荐
分类导航