GZipStream归纳总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yeluo_vinager/article/details/79812834

GZipStream 类

提供用于压缩和解压缩流的方法和属性。创建压缩流实例有个参数枚举CompressionMode,它有两个值分别是Compress、DeCompress。表示压缩和解压。

压缩和解压代码

  //实例化FileStream对象infile
            FileStream infile = new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.Read);
            byte[] buffer = new byte[infile.Length];
  //是否可读
            int count = infile.Read(buffer, 0, buffer.Length);
            if (count != buffer.Length) {
                infile.Close();
                Console.WriteLine("Test Failed: Unable to read data from file");
                return;
            }
            infile.Close();
            MemoryStream ms = new MemoryStream();         
            GZipStream compressedzipStream = new GZipStream(ms, CompressionMode.Compress, true);
            compressedzipStream.Write(buffer, 0, buffer.Length);
            compressedzipStream.Close();

//解压
            ms.Position = 0;
            GZipStream zipStream = new GZipStream(ms, CompressionMode.Decompress);
            byte[] decompressedBuffer = new byte[buffer.Length + 100];
            int offset = 0;
            while (true) {
                int bytesRead = zipStream.Read(decompressedBuffer, offset, 100);
                if (bytesRead == 0) {
                    break;
                }
                offset += bytesRead;
            }
这些是在内存处理,同样可以写入硬盘中
 public static void GZipCompress(string filepath, string gzipfilepath)
        {
            using (FileStream fsRead = File.OpenRead(filepath)) {
                using (FileStream fsWrite = File.OpenWrite(gzipfilepath)) {
                    using (GZipStream zipStream = new GZipStream(fsWrite, CompressionMode.Compress)) {
                        byte[] byts = new byte[1024];
                        int len = 0;
                        while ((len = fsRead.Read(byts, 0, byts.Length)) > 0) {
                            zipStream.Write(byts, 0, len);
                        }
                        fsRead.Close();
                        zipStream.Close();
                    }
                }
            }
        }
public static void GZipDecompress(string filepath, string gzipfilepath)
        {
            using (FileStream fsRead = File.OpenRead(gzipfilepath)) {
                using (GZipStream zip = new GZipStream(fsRead, CompressionMode.Decompress)) {
                    using (FileStream fsWrite = File.OpenWrite(filepath)) {
                        byte[] byts = new byte[1024];
                        int len = 0;
                        while ((len = zip.Read(byts, 0, byts.Length)) > 0) {
                            Console.WriteLine(Encoding.UTF8.GetString(byts.Take(len).ToArray()));
                            fsWrite.Write(byts, 0, len);
                            fsWrite.Flush();
                        }
                        fsWrite.Close();
                    }
                }

            }
        }
注:此类不能用于压缩大于 4 GB 的文件。当从 GZipStream 继承时,必须重写下列成员:CanSeek、CanWrite 和 CanRead。 
 



猜你喜欢

转载自blog.csdn.net/yeluo_vinager/article/details/79812834
今日推荐