最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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#創(chuàng)建windows服務(Windows Services)詳細步驟

    c#創(chuàng)建windows服務(Windows Services)詳細步驟

    這篇文章主要介紹了c#創(chuàng)建windows服務(Windows Services)詳細步驟,大家參考使用吧
    2013-12-12
  • C#泛型的使用及示例詳解

    C#泛型的使用及示例詳解

    這篇文章主要介紹了C#泛型的使用及示例,本文通過例子個大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • c#版在pc端發(fā)起微信掃碼支付的實例

    c#版在pc端發(fā)起微信掃碼支付的實例

    本篇文章主要介紹了c#版在pc端發(fā)起微信掃碼支付的實例,具有一定的參考價值,有興趣的可以了解一下。
    2016-11-11
  • 詳解WPF中的對象資源

    詳解WPF中的對象資源

    這篇文章主要介紹了WPF中對象資源的相關資料,幫助大家更好的理解和學習使用WPF,感興趣的朋友可以了解下
    2021-04-04
  • C#實現(xiàn)打開畫圖的同時載入圖片、最大化顯示畫圖窗體的方法

    C#實現(xiàn)打開畫圖的同時載入圖片、最大化顯示畫圖窗體的方法

    這篇文章主要介紹了C#實現(xiàn)打開畫圖的同時載入圖片、最大化顯示畫圖窗體的方法,涉及C#針對窗體及圖片操作的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • C#實現(xiàn)word和pdf格式互轉

    C#實現(xiàn)word和pdf格式互轉

    這篇文章主要為大家詳細介紹了如何通過C#實現(xiàn)word和pdf格式互轉功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-10-10
  • C#使用TreeView控件實現(xiàn)的二叉樹泛型節(jié)點類及其方法

    C#使用TreeView控件實現(xiàn)的二叉樹泛型節(jié)點類及其方法

    TreeView?控件在?C#?中主要用于顯示分層結構的數(shù)據(jù),這通常是一個文件系統(tǒng)的表示,但也可以是任何具有父子關系的數(shù)據(jù)集合,本文給大家介紹了C#使用TreeView控件實現(xiàn)的二叉樹泛型節(jié)點類及其方法,需要的朋友可以參考下
    2024-03-03
  • C# WinForm程序設計簡單計算器

    C# WinForm程序設計簡單計算器

    這篇文章主要為大家詳細介紹了C# WinForm程序設計簡單計算器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • C#中try-catch代碼塊的使用機制

    C#中try-catch代碼塊的使用機制

    ?try-catch代碼塊是C#中用于異常處理的核心機制,異常是在程序執(zhí)行過程中可能出現(xiàn)的錯誤,而try-catch代碼塊允許您在執(zhí)行代碼時捕獲并處理這些異常,感興趣的可以了解一下
    2025-11-11
  • c# HashSet的擴容機制需要注意的

    c# HashSet的擴容機制需要注意的

    這篇文章主要介紹了c# HashSet的擴容機制需要注意的兩個地方,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06

最新評論

柞水县| 黎川县| 中牟县| 罗定市| 理塘县| 宜章县| 三都| 白沙| 安泽县| 兰坪| 尼玛县| 蕉岭县| 鲁山县| 九台市| 香港| 天津市| 萨嘎县| 上犹县| 呼和浩特市| 云南省| 金乡县| 河东区| 九龙县| 虎林市| 自贡市| 桃园市| 荣成市| 精河县| 麻江县| 军事| 宣城市| 福鼎市| 贵南县| 敦化市| 宜章县| 弥渡县| 同江市| 赣州市| 湘阴县| 修文县| 门源|