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

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

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

主要是因?yàn)镚ZipStream的構(gòu)造函數(shù)中第一個(gè)需要傳入一個(gè)Stream,第二個(gè)是指定操作方式:壓縮還是解壓縮。

當(dāng)時(shí)的疑問(wèn)點(diǎn)主要有:

1.我傳入的Stream是包含未壓縮數(shù)據(jù)的Stream嗎?
2.我解壓時(shí)是從一個(gè)壓縮流中讀取數(shù)據(jù)后再用GZipStream解壓?jiǎn)幔?br>
出現(xiàn)以上兩點(diǎn)疑問(wèn),完全是我將GZipStream的用法理解反了。

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

而GZipStream的讀和寫分別對(duì)應(yīng)的是解壓和壓縮兩個(gè)操作,知道了這些,使用起來(lái)就簡(jiǎn)單了。

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

復(fù)制代碼 代碼如下:

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ù)寫入基礎(chǔ)流,同時(shí)會(huì)被壓縮
                    byte[] bytes = Encoding.UTF8.GetBytes("解壓縮測(cè)試");
                    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;
                        //讀取壓縮流,同時(shí)會(huì)被解壓
                        while ((len = gzip.Read(bytes, 0, bytes.Length)) > 0)
                        {
                            dms.Write(bytes, 0, len);
                        }
                    }
                }
                Console.WriteLine(Encoding.UTF8.GetString(dms.ToArray()));
            }

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

如果你在解壓時(shí)遇到“幻數(shù)頭不正確”的提示,是因?yàn)槟阋鈮旱臄?shù)據(jù)不是用GZip壓縮的。

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

    在 C# 中使用 插值字符串

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

    c#文件的復(fù)制,移動(dòng),創(chuàng)建(實(shí)例代碼)

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

    c#制作簡(jiǎn)單啟動(dòng)畫面的方法

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

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

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

最新評(píng)論