《[临床医学]23压缩流.ppt》由会员分享,可在线阅读,更多相关《[临床医学]23压缩流.ppt(34页珍藏版)》请在三一办公上搜索。
1、第二章输入输出(I/O),教学目标,使用文件系统类访问文件或文件夹(引用System.IO命名空间)用流类管理字节流(引用System.IO命名空间)使用Reader或Writer类管理.NET Framework应用程序数据(引用System.IO命名空间)在.NET Framework应用程序中压缩或解压缩流信息(引用System.IO命名空间),使用独立存储提高应用程序数据的安全性(引用System.IO.IsolatedStorage命名空间),教学内容,第一课文件系统巡览第二课读写文件第三课压缩流第四课使用独立存储,第三课压缩流,本课目标,使用GZipStream和DeflateSt
2、ream类压缩流使用GZipStream和DeflateStream类解压流,目录,前言压缩流介绍GZipStream类DeflateStream类使用压缩流压缩数据使用压缩流解压数据实验:解压缩已有文件小结,目录,前言压缩流介绍GZipStream类DeflateStream类使用压缩流压缩数据使用压缩流解压数据实验:解压缩已有文件小结,前言,前面课程学习了流的知识,并知道如何使用流,在特定工程里某些流会起到重要作用节省空间和宽带是程序高效率的基础.NET Framework提供了GZipStream和DeflateStream类实现压缩数据,目录,前言压缩流介绍GZipStream类Def
3、lateStream类使用压缩流压缩数据使用压缩流解压数据实验:解压缩已有文件小结,压缩流介绍,在.NET Framework中的I/O系统中,有两种方法压缩数据:GZIP和DEFLATE两种压缩方法都是符合工业标准的不侵犯专利的压缩算法注意:两种方法压缩文件(压缩前)大小最大为4G.NET Framework用两个流类实现这两种方式的压缩和解压两个流分别在GZipStream和DeflateStream类中GZipStream和DeflateStream类使用相同的压缩算法,两者区别为GZip压缩多一个存放额外信息头,如果被压缩的数据在本系统使用可选用DEFLATE,这样压缩的数据较小,目录
4、,前言压缩流介绍GZipStream类DeflateStream类使用压缩流压缩数据使用压缩流解压数据实验:解压缩已有文件小结,GZipStream类,GZipStream类使用GZip压缩方法可以把数据压缩到另外的流中下表列出了GZipStream类的重要属性和方法,GZipStream类,GZipStream类,GZipStream类,目录,前言压缩流介绍GZipStream类DeflateStream类使用压缩流压缩数据使用压缩流解压数据实验:解压缩已有文件小结,DeflateStream类,GZipStream类使用DEFLATE压缩方法可以把数据压缩到另外的流中下表列出了Deflat
5、eStream类的重要属性和方法,DeflateStream类,DeflateStream类,DeflateStream类,DeflateStream类,目录,前言压缩流介绍GZipStream类DeflateStream类使用压缩流压缩数据使用压缩流解压数据实验:解压缩已有文件小结,使用压缩流压缩数据,压缩流和上面讲到的流略有区别,上面提到的流是想某个资源写数据(例如文件流向文件中写数据,内存流向内存写数据),压缩流是向另外的流写数据压缩流常用来像其他流一样接收数据,但它写数据时,把数据以压缩的格式(或解压的格式)压入另一个流下面示例演示压缩一个文件系统中的文件,得到一个新版本的压缩文件,首
6、先要打开被压缩的文件和要写入数据的文件,FileStream sourceFile=File.OpenRead(inFilename);FileStream destFile=File.Create(outFilename);,使用压缩流压缩数据,压缩一个流需要压缩流要包含要输出的流(目标流),下面代码演示执行压缩流的构造方法上面语句告诉压缩流压缩数据并将数据压到目标流中,构造方法取CompressionMode值用来指明是压缩还是解压,在本例中是解压,所以用CompressionMode.Compress,一旦创建了压缩流,剩下的就是简单从源流读取数据,并传到压缩流中,代码如下,GZipSt
7、ream compStream=new GZipStream(destFile,CompressionMode.Compress);,int theByte=sourceFile.ReadByte();while(theByte!=-1)compStream.WriteByte(byte)theByte);theByte=sourceFile.ReadByte();,使用压缩流压缩数据,代码中,一次1byte数据从源文件输入到压缩流,注意数据并不是直接写入目标文件的,数据写入压缩流,(目标流被来自源文件的新版本的压缩数据填充)压缩后的压缩流将压缩数据填充到目标文件流中上例代码并不是针对GZip
8、压缩,把GZipStream换成DeflateStream,后面的代码不用修改,就可以实现DEFLATE方法的压缩,DeflateStream compStream=new DeflateStream(destFile,CompressionMode.Compress);,目录,前言压缩流介绍GZipStream类DeflateStream类使用压缩流压缩数据使用压缩流解压数据实验:解压缩已有文件小结,使用压缩流解压数据,除了处理流的轻微不同,解压和压缩的程序是一样的和压缩一样,要先创建源和目标文件,如下代码在本例中,源文件是压缩文件,目标文件是准备新生成的解压文件创建压缩流后,需要做两个事情
9、,一是包含源文件因为里面有压缩的数据,二是指定CompressionMode.Decompress值确定是解压,FileStream sourceFile=File.OpenRead(inFilename);FileStream destFile=File.Create(outFilename);,GZipStream compStream=new GZipStream(sourceFile,CompressionMode.Compress);,使用压缩流解压数据,从压缩流读取数据而不是从源文件读取数据,直接拔数据写到文件而不是通过压缩流写入无论压缩还是解压的例子,压缩流要包含具有(或将要具有
10、)压缩数据的流,对压缩数据是读还是写取决于压缩还是解压,int theByte=compStream.ReadByte();while(theByte!=-1)destFile.WriteByte(byte)theByte);theByte=compStream.ReadByte();,示例:压缩流示例,目录,前言压缩流介绍GZipStream类DeflateStream类使用压缩流压缩数据使用压缩流解压数据实验:解压缩已有文件小结,实验:解压缩已有文件P120,目录,前言压缩流介绍GZipStream类DeflateStream类使用压缩流压缩数据使用压缩流解压数据实验:解压缩已有文件小结,小结,压缩流类(GZipStream和DeflateStream)能够压缩或解压缩的最大文件大小为4G压缩流类要包含另一个流对象用来向其中存储压缩数据,练习P124,