压缩、解压缩流GZipStream

如果要在压缩过程中检查错误或要与其他操作系统所用程序共享压缩数据,则要是用GZipStream类。GZipStream类包含是用GZip数据格式进行压缩和解压缩文件的方法,该类不能用于解压缩大于4GB的文件。

一、属性

BaseStream       获取对基础流的引用。

CanRead        获取一个值,该值指示流是否支持在解压缩文件的过程中读取文件。 (重写 Stream..::.CanRead。)

CanSeek        获取一个值,该值指示流是否支持查找。 (重写 Stream..::.CanSeek。)

CanTimeout       获取一个值,该值确定当前流是否可以超时。 (继承自 Stream。)

CanWrite         获取一个值,该值指示流是否支持写入。 (重写 Stream..::.CanWrite。)

Length          不支持,并且总是引发 NotSupportedException。 (重写 Stream..::.Length。)

Position         不支持,并且总是引发 NotSupportedException。 (重写 Stream..::.Position。)

ReadTimeout       获取或设置一个值(以毫秒为单位),该值确定流在超时前尝试读取多长时间。 (继承自 Stream。)

WriteTimeout       获取或设置一个值(以毫秒为单位),该值确定流在超时前尝试写入多长时间。 (继承自 Stream。)

二、方法

BeginRead         开始异步读操作。 (重写 Stream..::.BeginRead(array<Byte>[]()[], Int32, Int32, AsyncCallback, Object)。)

BeginWrite        开始异步写操作。 (重写 Stream..::.BeginWrite(array<Byte>[]()[], Int32, Int32, AsyncCallback, Object)。)

Close           关闭当前流并释放与之关联的所有资源(如套接字和文件句柄)。 (继承自 Stream。)

CreateObjRef         创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。 (继承自 MarshalByRefObject。)

Dispose           已重载。

EndRead           等待挂起的异步读取完成。 (重写 Stream..::.EndRead(IAsyncResult)。)

EndWrite          处理异步写入的结束。 (重写 Stream..::.EndWrite(IAsyncResult)。)

Flush            将当前 GZipStream 对象的内部缓冲区的内容刷新到基础流。 (重写 Stream..::.Flush()()()。)

GetHashCode        用作特定类型的哈希函数。 (继承自 Object。)

GetLifetimeService     检索控制此实例的生存期策略的当前生存期服务对象。 (继承自 MarshalByRefObject。)

InitializeLifetimeService  获取控制此实例的生存期策略的生存期服务对象。 (继承自 MarshalByRefObject。)

MemberwiseClone     已重载。

Read            将若干解压缩的字节读入指定的字节数组。 (重写 Stream..::.Read(array<Byte>[]()[], Int32, Int32)。)

ReadByte         从流中读取一个字节,并将流内的位置向前推进一个字节,或者如果已到达流的末尾,则返回 -1。 (继承自 Stream。)

Seek            此属性不受支持,并且总是引发 NotSupportedException。 (重写 Stream..::.Seek(Int64, SeekOrigin)。)

SetLength        此属性不受支持,并且总是引发 NotSupportedException。 (重写 Stream..::.SetLength(Int64)。)

Write           从指定的字节数组中将压缩的字节写入基础流。 (重写 Stream..::.Write(array<Byte>[]()[], Int32, Int32)。)

WriteByte        将一个字节写入流内的当前位置,并将流内的位置向前推进一个字节。 (继承自 Stream。)

练了下手,附上代码:(注意释放资源。)

        static void Main(string[] args)
        {
            //string str = "你好asd阿叔打算";
            //for (int i = 0; i < 20000; i++)
            //{
            //    str += "你好asd阿叔打算的";
            //}
            //File.WriteAllText(@"E:\file.txt", str, Encoding.UTF8);
            //Console.WriteLine("添加完成");
            //以上代码输出一个468K的txt文件

            FileStream fs = new FileStream(@"E:\file.txt", FileMode.Open, FileAccess.ReadWrite);
            byte[] bytes = new byte[fs.Length];
            fs.Read(bytes,0,(int)fs.Length);

            // 压缩入这个文件流
            FileStream fs1 = new FileStream(@"E:\file1.txt", FileMode.CreateNew, FileAccess.Write);
            GZipStream gs = new GZipStream(fs1, CompressionMode.Compress, true);
            //把数据写入压缩流
            gs.Write(bytes, 0, bytes.Length);   //写入之后,会自动调用FileStream.Write()方法    这时候E盘会生成一个E:\file1.txt文件,里面是压缩之后的内容
            Console.WriteLine(fs.Length);   //输出 480024
            Console.WriteLine(fs1.Length);  //输出 5142

            //压缩流写入内存
            MemoryStream target = new MemoryStream();
            GZipStream gzs = new GZipStream(target, CompressionMode.Compress, true);
            gzs.Write(bytes, 0, bytes.Length);  //相当于调用了MemoryStream的Write方法,已将压缩的数据写入内存
            byte[] byteCompress = target.ToArray();
            Console.WriteLine(target.Length);   //输出5142

            //解压缩后输出
            FileStream fs2 = new FileStream(@"E:\file1.txt",FileMode.Open,FileAccess.Read);
            byte[] byte1 = new byte[fs2.Length];
            GZipStream gzs1 = new GZipStream(fs2, CompressionMode.Decompress, true);
            StreamReader streamR = new StreamReader(gzs1, Encoding.Default);
            string str = streamR.ReadToEnd();
            Console.WriteLine(str);     //输出解压之后的内容了  好长的

            //解压缩之后用Read()是在不知道长度该如何确定
            FileStream fs3 = new FileStream(@"E:\file1.txt", FileMode.Open, FileAccess.Read);
            byte[] byte2 = new byte[fs2.Length];
            GZipStream gzs2 = new GZipStream(fs2, CompressionMode.Decompress, true);
            gzs1.Read(byte2,0,byte2.Length);
            Console.WriteLine(Encoding.UTF8.GetString(byte2));     //输出解压之后的内容了  好长的

            Console.ReadKey();
        }
时间: 2024-10-26 07:00:58

压缩、解压缩流GZipStream的相关文章

[转][C#]压缩解压缩类 GZipStream

本文来自:https://msdn.microsoft.com/zh-cn/library/system.io.compression.gzipstream(v=vs.100).aspx using System; using System.IO; using System.IO.Compression; namespace zip { public class Program { public static void Main() { // Path to directory of files

Linux压缩/解压缩命令使用方法

compress 命令 [[email protected] ~]# compress [-dcr] 文件或目录 参数: -d :用来解压缩的参数 -r :可以连同目录下的文件也同时给予压缩[此参数慎用比较危险] -c :将压缩资料输出成为 standard output (输出到屏幕) 范例: 范例一:将 /etc/install.log 复制到 /tmp ,并加以压缩 [[email protected] ~]# cd /tmp [[email protected] tmp]# cp /et

大数据技术之压缩解压缩案例

7.10 压缩/解压缩案例 7.10.1 对数据流的压缩和解压缩 CompressionCodec有两个方法可以用于轻松地压缩或解压缩数据.要想对正在被写入一个输出流的数据进行压缩,我们可以使用createOutputStream(OutputStreamout)方法创建一个CompressionOutputStream,将其以压缩格式写入底层的流.相反,要想对从输入流读取而来的数据进行解压缩,则调用createInputStream(InputStreamin)函数,从而获得一个Compres

谢烟客---------Linux之压缩解压缩及归档工具的使用

压缩工具 compress/uncompress:  .Z结尾 gzip/gunzip: .gz结尾 bzip2/bunzip2: .bz2结尾 xz/unxz: .xz后缀 压缩及归档工具: zip/unzip 归档工具: tar,cpio(特殊场景) gzip/gunzip/zcat命令 1.LZ77压缩算法 2.压缩比不高:快速.高效 3.压缩/解压缩后删除原文件,为了节约空间 4.纯文本压缩,二进制压缩意义不大 5.压缩目录,-r gzip [OPTIONS...] FILE     -

Linux压缩解压缩(unzip,tar)

unzip tar 常用解压缩命令: tar -zxvpf:解压缩 tar -zcvpf: 压缩 # tar [-j|-z] [cv] [-f 建立的檔名] filename... <==打包与压缩 # tar [-j|-z] [tv] [-f 建立的檔名]             <==察看檔名 # tar [-j|-z] [xv] [-f 建立的檔名] [-C 目录]   <==解压缩 参数: -z:透过gzip的支持进行压缩/解压缩,此时档名最好为*.tar.gz. -j:透过bz

2016-8-28 压缩解压缩及归档 while脚本

文件管理命令――压缩解压缩及归档基本工具 压缩.解压缩命令 压缩格式:gz, bz2, xz, zip, Z 压缩算法:算法不同,压缩比也会不同: 早期    压缩:        compress(压缩比很小): FILENAME.Z ―― 压缩后的文件名    解压:        uncompress gzip.bzip2.xz只能压缩文件,并且默认压缩完成后删除源文件,zip可以压缩目录 gzip: .gz    gzip /PATH/TO/SOMEFILE:压缩完成后会删除原文件   

【linux_笔记】Linux_文件管理命令—压缩解压缩及归档基本工具

学习资源来自:www.magedu.com 学习记录过程中难免出现错误,如有发现,还望大神们指出. 示例操作部分有的与历史操作有关,如果先前的示例操作没有执行过的话,可能会有部分示例的操作无法执行.示例仅供参考.(示例见附件) 文件管理命令--压缩解压缩及归档基本工具 压缩.解压缩命令 压缩格式:gz, bz2, xz, zip, Z 压缩算法:算法不同,压缩比也会不同: 早期    压缩:        compress(压缩比很小): FILENAME.Z -- 压缩后的文件名    解压:

基于ICSharpCode.SharpZipLib.Zip的压缩解压缩

今天记压缩解压缩的使用,是基于开源项目ICSharpCode.SharpZipLib.Zip的使用. 一.压缩: /// <summary> /// 压缩 /// </summary> /// <param name="sourceDirectory"></param> /// <param name="targetZipName"></param> /// <param name=&qu

Linux常用命令(第二版) --压缩解压缩命令

压缩解压缩命令: ----------.gz---------- 1.压缩 gzip[GNU zip]: /bin/gzip 格式: gzip 选项 [文件] #压缩文件,压缩后扩展名为.gz,Linux下最常用 #比较常见的软件源代码包的格式 特点: 1)只能压缩文件,不能压缩目录 2)不保留原文件 e.g. gzip newfile #原newfile删除 2.解压 1)gunzip[GNU zip]: /bin/gunzip 2)gzip -d #解压.gz E.g. gzip -d ne