zoukankan      html  css  js  c++  java
  • c# gzip解压缩

                //引用
                using System.IO.Compression;
                //解压缩类
                GZipStream
                //解压缩实例
                ......
                HttpWebResponse httpRequest = (HttpWebResponse)httpLogin.GetResponse();
                Stream HttpResStream= httpRequest.GetResponseStream();
                GZipStream gzip = new GZipStream(HttpResStream, CompressionMode.Decompress) ;
                //对解压缩后的字符串信息解析
               while ((len = gzip.Read(bytes, 0, bytes.Length)) > 0)
                {
                   line =  System.Text.Encoding.Default.GetString(bytes);
                } 

    http://msdn.microsoft.com/zh-cn/library/system.io.compression.gzipstream(v=vs.80).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1 

    using System;
    using System.IO;
    using System.IO.Compression;

    public class GZipTest
    {
        public static int ReadAllBytesFromStream(Stream stream, byte[] buffer) 
        {
        // Use this method is used to read all bytes from a stream.
        int offset = 0;
        int totalCount = 0;
            while (true
            {
            int bytesRead = stream.Read(buffer, offset, 100); 
                if ( bytesRead == 0
                {
                break
                }
        offset += bytesRead;
        totalCount += bytesRead; 
            }
        return totalCount;
        } 

        public static bool CompareData(byte[] buf1, int len1, byte[] buf2, int len2) 
        {
            // Use this method to compare data from two different buffers.
            if (len1 != len2) 
            { 
            Console.WriteLine("Number of bytes in two buffer are different {0}:{1}", len1, len2);
            return false;
            }

            for ( int i= 0; i< len1; i++) 
            {
                if ( buf1[i] != buf2[i]) 
                {
                Console.WriteLine("byte {0} is different {1}|{2}", i, buf1[i], buf2[i]);
                return false;
                }
            }
        Console.WriteLine("All bytes compare.");
        return true
        }

        public static void GZipCompressDecompress(string filename)
        {
        Console.WriteLine("Test compression and decompression on file {0}", filename);
        FileStream infile;
            try
            {
            // Open the file as a FileStream object.
            infile = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
            byte[] buffer = new byte[infile.Length];
            // Read the file to ensure it is readable.
            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();
            // Use the newly created memory stream for the compressed data.
            GZipStream compressedzipStream = new GZipStream(ms , CompressionMode.Compress, true);
            Console.WriteLine("Compression");
            compressedzipStream.Write(buffer, 0, buffer.Length);
            // Close the stream.
            compressedzipStream.Close();
            Console.WriteLine("Original size: {0}, Compressed size: {1}", buffer.Length, ms.Length);

            // Reset the memory stream position to begin decompression.
            ms.Position = 0;
            GZipStream zipStream = new GZipStream(ms, CompressionMode.Decompress);
            Console.WriteLine("Decompression");
            byte[] decompressedBuffer = new byte[buffer.Length + 100];
            // Use the ReadAllBytesFromStream to read the stream.
            int totalCount = GZipTest.ReadAllBytesFromStream(zipStream, decompressedBuffer);
            Console.WriteLine("Decompressed {0} bytes", totalCount);

            if( !GZipTest.CompareData(buffer, buffer.Length, decompressedBuffer, totalCount) ) 
            {
            Console.WriteLine("Error. The two buffers did not compare.");
            }
        zipStream.Close(); 
            } // end try
            catch (InvalidDataException)
            {
                Console.WriteLine("Error: The file being read contains invalid data.");
            }
            catch (FileNotFoundException)
            {
                Console.WriteLine("Error:The file specified was not found.");
            }
            catch (ArgumentException)
            {
                Console.WriteLine("Error: path is a zero-length string, contains only white space, or contains one or more invalid characters");
            }
            catch (PathTooLongException)
            {
                Console.WriteLine("Error: The specified path, file name, or both exceed the system-defined maximum length. For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.");
            }
            catch (DirectoryNotFoundException)
            {
                Console.WriteLine("Error: The specified path is invalid, such as being on an unmapped drive.");
            }
            catch (IOException)
            {
                Console.WriteLine("Error: An I/O error occurred while opening the file.");
            }
            catch (UnauthorizedAccessException)
            {
                Console.WriteLine("Error: path specified a file that is read-only, the path is a directory, or caller does not have the required permissions.");
            }
            catch (IndexOutOfRangeException)
            {
                Console.WriteLine("Error: You must provide parameters for MyGZIP.");
            }
        }
        public static void Main(string[] args)
        {
            string usageText = "Usage: MYGZIP <inputfilename>";
            //If no file name is specified, write usage text.
            if (args.Length == 0)
            {
                Console.WriteLine(usageText);
            }
            else
            {
                if (File.Exists(args[0]))
                    GZipCompressDecompress(args[0]);
            }
        }
    }

         

  • 相关阅读:
    切换不同的数据状态布局,包含加载中、空数据和出错状态,可自定义状态布局
    React15.6.0实现Modal弹层组件
    Ant Design 3.0 使用案例
    高仿阴阳师官网轮播图效果的jQuery插件
    iOS 瀑布流封装
    物联网 —— 常用传感器模块
    Python 标准库 —— 邮件(email)与邮件服务器(smtplib)
    User-Agent 及其构造
    Python 爬虫 —— 网页内容解析(lxml)
    python实现无序列表:链表
  • 原文地址:https://www.cnblogs.com/farcall/p/4042446.html
Copyright © 2011-2022 走看看