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

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

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

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

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

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

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

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

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

寫入的數(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("解壓縮測試");
                    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)文章

最新評論

民勤县| 仪陇县| 随州市| 湘阴县| 绵竹市| 邳州市| 庆云县| 元氏县| 广东省| 灵山县| 玉树县| 中超| 社旗县| 台前县| 获嘉县| 宣恩县| 韶山市| 龙游县| 即墨市| 朝阳县| 丰宁| 湘乡市| 金溪县| 乐东| 江门市| 庆安县| 乌兰察布市| 台东市| 广饶县| 田阳县| 明水县| 盐源县| 乐东| 威宁| 昔阳县| 鹿邑县| 武宣县| 祁阳县| 玉林市| 龙陵县| 巴马|