欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#實現(xiàn)GZip壓縮和解壓縮入門實例

 更新時間:2014年04月14日 10:12:41   作者:  
C#中用GZip對數(shù)據(jù)壓縮和解壓縮非常方便,但是當我第一次拿到這個類的時候卻感覺很迷茫,無從下手

主要是因為GZipStream的構造函數(shù)中第一個需要傳入一個Stream,第二個是指定操作方式:壓縮還是解壓縮。

當時的疑問點主要有:

1.我傳入的Stream是包含未壓縮數(shù)據(jù)的Stream嗎?
2.我解壓時是從一個壓縮流中讀取數(shù)據(jù)后再用GZipStream解壓嗎?

出現(xiàn)以上兩點疑問,完全是我將GZipStream的用法理解反了。

其實GZipStream里面存的是已經(jīng)壓縮過的數(shù)據(jù)流,傳入的Stream是作為基礎Stream傳入,如果要壓縮,那你就可以傳一個空的Stream進去,如果要解壓,就將包含壓縮數(shù)據(jù)的Stream傳進去。

而GZipStream的讀和寫分別對應的是解壓和壓縮兩個操作,知道了這些,使用起來就簡單了。

寫入的數(shù)據(jù)會被壓縮后寫入到傳入的Stream中,讀取的數(shù)據(jù)也是解壓后的數(shù)據(jù),可以直接寫入到一個新的流中。

復制代碼 代碼如下:

byte[] cbytes = null;
//壓縮
            using (MemoryStream cms = new MemoryStream())
            {
                using (System.IO.Compression.GZipStream gzip = new System.IO.Compression.GZipStream(cms,System.IO.Compression.CompressionMode.Compress))
                {
                    //將數(shù)據(jù)寫入基礎流,同時會被壓縮
                    byte[] bytes = Encoding.UTF8.GetBytes("解壓縮測試");
                    gzip.Write(bytes, 0, bytes.Length);
                }
                cbytes = cms.ToArray();
            }
//解壓
            using (MemoryStream dms = new MemoryStream())
            {
                using (MemoryStream cms = new MemoryStream(cbytes))
                {
                    using (System.IO.Compression.GZipStream gzip = new System.IO.Compression.GZipStream(cms, System.IO.Compression.CompressionMode.Decompress))
                    {
                        byte[] bytes = new byte[1024];
                        int len = 0;
                        //讀取壓縮流,同時會被解壓
                        while ((len = gzip.Read(bytes, 0, bytes.Length)) > 0)
                        {
                            dms.Write(bytes, 0, len);
                        }
                    }
                }
                Console.WriteLine(Encoding.UTF8.GetString(dms.ToArray()));
            }

同時 在壓縮時傳入的流可以是非空流,你可以在寫入其他數(shù)據(jù)后再寫入壓縮數(shù)據(jù),不會影響最后的結果。

如果你在解壓時遇到“幻數(shù)頭不正確”的提示,是因為你要解壓的數(shù)據(jù)不是用GZip壓縮的。

相關文章

  • C#獲取本機IP地址(ipv4)

    C#獲取本機IP地址(ipv4)

    本文主要介紹了C#獲取本機所有IP地址的方法、C#獲取本機IP地址(ipv4)的方法等。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • C#實現(xiàn)FFT(遞歸法)的示例代碼

    C#實現(xiàn)FFT(遞歸法)的示例代碼

    FFT是數(shù)字信號處理中的重要算法。這篇文章將為大家詳細介紹一下如何利用C#語言實現(xiàn)FFT(遞歸法),文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-07-07
  • C#串口通信模塊使用方法示例

    C#串口通信模塊使用方法示例

    這篇文章主要介紹了C#串口通信模塊使用方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • C#獲得MAC地址(網(wǎng)卡序列號)的實現(xiàn)代碼

    C#獲得MAC地址(網(wǎng)卡序列號)的實現(xiàn)代碼

    這篇文章主要介紹了C#獲得MAC地址的實現(xiàn)代碼,需要的朋友可以參考下
    2014-02-02
  • 基于WPF實現(xiàn)顏色選擇器控件

    基于WPF實現(xiàn)顏色選擇器控件

    這篇文章主要介紹了如何基于WPF實現(xiàn)簡單的顏色選擇器控件,文中的示例代碼講解詳細,對我們學習或工作有一定幫助,需要的小伙伴可以參考一下
    2023-08-08
  • C#把數(shù)字轉換成大寫金額的代碼實例

    C#把數(shù)字轉換成大寫金額的代碼實例

    這篇文章主要介紹了C#把數(shù)字轉換成大寫金額的代碼實例,例如把200轉換成“貳佰元”,需要的朋友可以參考下
    2014-05-05
  • 在 C# 中使用 插值字符串

    在 C# 中使用 插值字符串

    這篇文章主要介紹了在 C# 中使用 插值字符串,字符串插值是一種將 表達式 插入到字符串字面量中的一種技術,又稱為變量替換,變量插值,變量展開 等等,它是一種用相應值替換字符串中的一個或者更多個占位符的處理過程
    2022-01-01
  • c#文件的復制,移動,創(chuàng)建(實例代碼)

    c#文件的復制,移動,創(chuàng)建(實例代碼)

    c#文件的復制,移動,創(chuàng)建(實例代碼),需要的朋友可以參考一下
    2013-04-04
  • c#制作簡單啟動畫面的方法

    c#制作簡單啟動畫面的方法

    這篇文章主要介紹了c#制作簡單啟動畫面的方法,涉及C#實現(xiàn)桌面程序啟動畫面的相關技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • c#實現(xiàn)最簡潔的快速排序(你絕對可以看懂)

    c#實現(xiàn)最簡潔的快速排序(你絕對可以看懂)

    這篇文章主要給大家介紹了關于利用c#實現(xiàn)如何最簡潔的快速排序,實現(xiàn)的方法你絕對可以看懂,文中通過示例代碼介紹的非常詳細,對大家學習或者使用c#具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-05-05

最新評論