使用GZipStream实现压缩和解压缩
概述
之前做項(xiàng)目,涉及到存入到數(shù)據(jù)庫或者h(yuǎn)ttp傳輸?shù)臄?shù)據(jù)量比較大,這個(gè)時(shí)候,就需要考慮在存入數(shù)據(jù)庫或者發(fā)送傳輸之前,將數(shù)據(jù)壓縮下,當(dāng)從數(shù)據(jù)庫中取出時(shí),再解壓還原數(shù)據(jù)。特地找了下發(fā)現(xiàn)有GZipStream可以實(shí)現(xiàn)這個(gè)功能。此類表示gzip數(shù)據(jù)格式,該格式使用行業(yè)標(biāo)準(zhǔn)算法進(jìn)行無損文件壓縮和解壓縮。該格式包括用于檢測(cè)數(shù)據(jù)損壞的循環(huán)冗余校驗(yàn)值。gzip數(shù)據(jù)格式使用與DeflateStream類相同的算法,但可以擴(kuò)展為使用其他壓縮格式。該格式很容易以專利未涵蓋的方式實(shí)施。從.NET Framework 4.5開始,DeflateStream類使用zlib庫進(jìn)行壓縮。因此,與.NET Framework的早期版本相比,它提供了更好的壓縮算法,并且在大多數(shù)情況下,提供了較小的壓縮文件。
GZipStream使用的一般流程如下:
打開一個(gè)現(xiàn)有的文件
打開/創(chuàng)建輸出文件
創(chuàng)建GZipStream對(duì)象
逐字節(jié)讀源文件,并把它傳遞到GZipStream
使用GZipStream寫入到輸出文件流
代碼實(shí)現(xiàn)
1、壓縮字符串
?///?<summary>///?壓縮字串,回傳?Base64?結(jié)果///?</summary>///?<param?name="text"></param>///?<returns></returns>public?static?string?ZipText(string?text){byte[]?inputBytes?=?Encoding.UTF8.GetBytes(text);return?ZipText(inputBytes);}public?static?string?ZipText(byte[]?inputBytes){using?(MemoryStream?outputStream?=?new?MemoryStream()){using?(GZipStream?gs?=?new?GZipStream(outputStream,?CompressionMode.Compress)){gs.Write(inputBytes,?0,?inputBytes.Length);}byte[]?outputBytes?=?outputStream.ToArray();string?result?=?Convert.ToBase64String(outputBytes);return?result;}}2、解壓縮字符串
??///?<summary>///?解壓縮字串///?</summary>///?<param?name="zippedText"></param>///?<returns></returns>public?static?string?UnzipZippedText(string?zippedText){if?(String.IsNullOrEmpty(zippedText)){return?String.Empty;}string?unzipedText?=?null;try{byte[]?buffer?=?Convert.FromBase64String(zippedText);MemoryStream?ms?=?new?MemoryStream(buffer);GZipStream?zipStream?=?new?GZipStream(ms,?CompressionMode.Decompress);using?(StreamReader?streamReader?=?new?StreamReader(zipStream)){unzipedText?=?streamReader.ReadToEnd();}}catch?(Exception?ex){unzipedText?=?String.Empty;}return?unzipedText;}運(yùn)行結(jié)果測(cè)試,源文件經(jīng)過壓縮大小只有120字節(jié),而解壓后,源文件與解壓后txt的大小一致
總結(jié)
以上是生活随笔為你收集整理的使用GZipStream实现压缩和解压缩的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在 C#9 中使用 static 匿
- 下一篇: MongoDB,凉凉?