C#完成GZip緊縮息爭緊縮入門實例。本站提示廣大學習愛好者:(C#完成GZip緊縮息爭緊縮入門實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C#完成GZip緊縮息爭緊縮入門實例正文
重要是由於GZipStream的結構函數中第一個須要傳入一個Stream,第二個是指定操作方法:緊縮照樣解緊縮。
其時的疑問點重要有:
1.我傳入的Stream是包括未緊縮數據的Stream嗎?
2.我解壓時是從一個緊縮流中讀取數據後再用GZipStream解壓嗎?
湧現以上兩點疑問,完整是我將GZipStream的用法懂得反了。
其實GZipStream外面存的是曾經緊縮過的數據流,傳入的Stream是作為基本Stream傳入,假如要緊縮,那你便可以傳一個空的Stream出來,假如要解壓,就將包括緊縮數據的Stream傳出來。
而GZipStream的讀和寫分離對應的是解壓和緊縮兩個操作,曉得了這些,應用起來就簡略了。
寫入的數據會被緊縮後寫入到傳入的Stream中,讀取的數據也是解壓後的數據,可以直接寫入到一個新的流中。
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))
{
//將數據寫入基本流,同時會被緊縮
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()));
}
同時 在緊縮時傳入的流可所以非空流,你可以在寫入其他數據後再寫入緊縮數據,不會影響最初的成果。
假如你在解壓時碰到“幻數頭不准確”的提醒,是由於你要解壓的數據不是用GZip緊縮的。