.NET中利用GZipStream实现压缩与解压缩

.NET中为我们提供了一些用于压缩和解压缩的类,其中GZipStream是比较常用的之一。通过GZipStream的构造函数我们知道,可以通过向GZipStream的构造函数传入CompressonMode参数指定生成的该实例是用于压缩(Compress)还是解压缩(Decompress)。

1 public GZipStream(Stream stream, CompressionMode mode);

该构造函数表明我们还需要指定一个流对象作为输入参数。注意这里的stream所对应的一定是一个和压缩有关的流。也就是说,如果我们指定CompressionMode为Decompress的话,那么stream对象应该为一个输入流(input stream),该输入流的格式已经压缩过的,我们通过GZipStream的实例将压缩数据(input stream)读取出来后生成的数据就为解压缩过后的数据了。如果我们指定CompressionMode为Compression的话,那么stream对应的流一定是一个将要压缩的输出流 (output stream),我们通过GZipStream的实例将普通流写入输出流中,输出流中的数据就为压缩后的数据了。

例1: 现在有一个已经压缩好的文件FileA.txt.gz,我们现在要做的工作是将该文件解压缩为FileB.txt。具体步骤通过下面的代码演示:

 1             //input file (already compressed)
 2             string fileA = "FileA.txt.gz";
 3             //output file (need to decompress FileA then write to fileB)
 4             string fileB = "FileB.txt";
 5
 6             //byte array buffer
 7             byte[] buffer = new byte[BUFFER_SIZE];
 8             int bytesReaded = 0;
 9
10
11             //input file stream
12             Stream fileAStream = new FileStream(fileA, FileMode.Open, FileAccess.Read);
13             //output file stream
14             Stream fileBStream = new FileStream(fileB, FileMode.Create, FileAccess.Write);
15             //use fileAStream as inputStream
16             GZipStream gzipStream = new GZipStream(fileAStream, CompressionMode.Decompress);
17
18             do
19             {
20                 //read from inputStream, data in buffer is decopressed
21                 bytesReaded = gzipStream.Read(buffer, 0, BUFFER_SIZE);
22                 //writed decompressed data into output stream
23                 fileBStream.Write(buffer, 0, bytesReaded);
24             } while (bytesReaded > 0);
25
26             //close related streams.
27             fileAStream.Close();
28             gzipStream.Close();
29             fileBStream.Close(); 

例2:现在我们已经将FileA.txt.gz文件解压缩为FileB.txt文件了。接下来的实例演示了如果将FileB.txt压缩为FileC.txt.gz

 1             //input file (flat file)
 2             string fileB = "FileB.txt";
 3             //output file (need to be compressed from FileB then write to FileC)
 4             string fileC = "FileC.txt.gz";
 5
 6             //byte array buffer
 7             byte[] buffer = new byte[BUFFER_SIZE];
 8             int bytesReaded = 0;
 9
10             //input stream
11             Stream fileBStream = new FileStream(fileB, FileMode.Open, FileAccess.Read);
12             //output stream
13             Stream fileCStream = new FileStream(fileC, FileMode.Create, FileAccess.Write);
14             //specify fileCStream as target stream, we need to compress fileB then write to fileC, so specify CompressionMode to Compress
15             GZipStream gzipStream = new GZipStream(fileCStream, CompressionMode.Compress);
16
17             do
18             {
19                 //read from fileBStream
20                 bytesReaded = fileBStream.Read(buffer, 0, BUFFER_SIZE);
21                 //write to fileCStream
22                 gzipStream.Write(buffer, 0, bytesReaded);
23             } while (bytesReaded > 0);
24             //close related streams.
25             fileBStream.Close();
26             gzipStream.Close();
27             fileCStream.Close();
时间: 2024-10-12 12:06:12

.NET中利用GZipStream实现压缩与解压缩的相关文章

利用JAVA API函数实现数据的压缩与解压缩

综述 许多信息资料都或多或少的包含一些多余的数据.通常会导致在客户端与服务器之间,应用程序与计算机之间极大的数据传输量.最常见的解决数据存储和信息传送的方法是安装额外的存储设备和扩展现有的通讯能力.这样做是可以的,但无疑会增加组织的运作成本.一种有效的解决数据存储与信息传输的方法是通过更有效率的代码来存储数据.这篇文章简要的介绍了数据的压缩与解压缩,并展示了用java.util.zip包来实现数据的压缩与解压缩是多么的方便与高效. 当然用诸如WinZip,gzip,和Java压缩(或jar)之类

2018-3-6Linux系统管理(8)压缩与解压缩工具、bash交互

回顾上一章所学到的内容有如何制作软RAID及LVM,在生产环境中,软RAID一点用处都是没有的,关键是要了解一下RAIDLevel的机制,及等级意义是什么.另一个就是LVM,那么LVM就是一个逻辑设备,提供卷管理操作(volume),将一个或多个底层物理设备,组织成为逻辑设备.在逻辑卷中有一种为快照的功能,而快照功能就是让我们在备份文件时更加流畅而设定的,其本身就不具有备份功能.那么在接下来的章节中讲述的是压缩与解压缩的工具. 一.压缩 在Windows当中,压缩与解压缩是很常见的操作.国内厂商

在内存中压缩及解压缩

在内存中压缩及解压缩 //引入头文件#import <zlib.h> //引入libz动态库 NSString *str = @"zlib compress and uncompress test\[email protected]\n2012-11-05\n"; NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding]; Bytef *text = (Bytef*)[data bytes]; uLong tle

Huffman的应用之文件压缩与解压缩

文件压缩与解压缩> 最近这段时间一直在学习树的这种数据结构,也接触到了Huffman树以及了解了什仫是Huffman编码,而我们常用的zip压缩也是利用的Huffman编码的特性,那仫是不是可以自己实现一个文件压缩呢?当然可以了.在文件压缩中我实现了Huffman树和建堆Heap的代码,zip压缩的介绍> http://www.cricode.com/3481.html 下面开始介绍自己实现的文件压缩的思路和问题... 1).统计>读取一个文件统计这个文件中字符出现的次数. 2).建树&

【转】libjpeg实现内存位图的压缩及解压缩-显示格式有问题

相信使用过的朋友应该会喜欢上libjpeg,它简单易用.压缩质量可以随意控制.并且稳定性很好,但是,官方网站给提供的libjpeg库, 不论是进行压缩时还是解压缩时,都需要用到FILE,使得我们如果想在内存中直接压缩或解压缩图像还要自己实现相应的结构, 总之,比较麻烦,尤其对初学者,更是不知从何处入手,幸运的是,libjpeg给我们提供了源代码,今天我就为大家介绍,怎样修改源代码, 使libjpeg可以非常容易的直接处理内存中的图像,而无需借助文件操作. 一.建立自己的libjpeg工程    

Linux下的压缩zip,解压缩unzip命令详解及实例

Linux下的压缩zip,解压缩unzip命令 本人亲自测试总结: linux 安装unzip zip 安装命令:yum install -y unzip zip # unzip yasuo.zip 方法一: 安装命令:yum install -y unzip zip 1. 我想把一个文件abc.txt和一个目录dir1压缩成为yasuo.zip:# zip -r yasuo.zip abc.txt dir12.我下载了一个yasuo.zip文件,想解压缩: # unzip yasuo.zip

使用SharpZip压缩与解压缩

使用SharpZip压缩与解压缩 编写人:左丘文 2015-4-11 大家在做项目时,相信会经常性的会遇到要对数据流或dataset byte[] 或文件进行压缩和解压缩,比如:利用webservice进行数据的更新与下载,如果在文件过大,如果不压缩相信肯定是传输入失败,今天在这里,我想与大家一起分享一下利用国外一开源的sharpzip类作为解压缩类来操作解压缩代码,在此做个小结,以供参考.有兴趣的同学,可以一同探讨与学习一下,否则就略过吧.   1. 之前做过一项目,该项目中有一个要与总部同步

Linux系统压缩及解压缩

==============================================================================  Linux系统解压缩 ============================================================================== 概述: 本篇将介绍Linux系统中的压缩和解压缩的工具,以及归档工具(tar,cpio) compress/uncompress:对应 .Z 结尾的压缩格式文件

Jcompress: 一款基于huffman编码和最小堆的压缩、解压缩小程序

前言 最近基于huffman编码和最小堆排序算法实现了一个压缩.解压缩的小程序.其源代码已经上传到github上面: Jcompress下载地址 .在本人的github上面有一个叫Utility的repository,该分类下面有一个名为Jcompress的目录便是本文所述的压缩.解压缩小程序的源代码.后续会在Utility下面增加其他一些实用的小程序,比如基于socket的文件断点下载小程序等等.如果你读了此文觉得还不错,不防给笔者的github点个star, 哈哈.在正式介绍Jcompres