C#實(shí)現(xiàn)GZip壓縮和解壓縮入門實(shí)例
主要是因?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è)新的流中。
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壓縮的。
- C#實(shí)現(xiàn)rar壓縮與解壓縮文件的方法
- C#文件流進(jìn)行壓縮和解壓縮的方法
- C# 利用ICSharpCode.SharpZipLib實(shí)現(xiàn)在線壓縮和解壓縮
- asp.net C#實(shí)現(xiàn)解壓縮文件的方法
- C#實(shí)現(xiàn)文件壓縮與解壓的方法示例【ZIP格式】
- C#實(shí)現(xiàn)的文件壓縮和解壓縮類
- C#實(shí)現(xiàn)壓縮和解壓縮的方法示例【Gzip和Zip方式】
- C#使用ICSharpCode.SharpZipLib.dll進(jìn)行文件的壓縮與解壓功能
- C#自定義字符串壓縮和解壓縮的方法
- C#壓縮或解壓rar、zip文件方法實(shí)例
相關(guān)文章
C#獲得MAC地址(網(wǎng)卡序列號(hào))的實(shí)現(xiàn)代碼
這篇文章主要介紹了C#獲得MAC地址的實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-02-02
C#把數(shù)字轉(zhuǎn)換成大寫金額的代碼實(shí)例
這篇文章主要介紹了C#把數(shù)字轉(zhuǎn)換成大寫金額的代碼實(shí)例,例如把200轉(zhuǎn)換成“貳佰元”,需要的朋友可以參考下2014-05-05
c#文件的復(fù)制,移動(dòng),創(chuàng)建(實(shí)例代碼)
c#文件的復(fù)制,移動(dòng),創(chuàng)建(實(shí)例代碼),需要的朋友可以參考一下2013-04-04
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

