使用GZipStream实现压缩和解压缩
生活随笔
收集整理的這篇文章主要介紹了
使用GZipStream实现压缩和解压缩
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
概述
之前做項目,涉及到存入到數據庫或者http傳輸的數據量比較大,這個時候,就需要考慮在存入數據庫或者發送傳輸之前,將數據壓縮下,當從數據庫中取出時,再解壓還原數據。特地找了下發現有GZipStream可以實現這個功能。此類表示gzip數據格式,該格式使用行業標準算法進行無損文件壓縮和解壓縮。該格式包括用于檢測數據損壞的循環冗余校驗值。gzip數據格式使用與DeflateStream類相同的算法,但可以擴展為使用其他壓縮格式。該格式很容易以專利未涵蓋的方式實施。從.NET Framework 4.5開始,DeflateStream類使用zlib庫進行壓縮。因此,與.NET Framework的早期版本相比,它提供了更好的壓縮算法,并且在大多數情況下,提供了較小的壓縮文件。
GZipStream使用的一般流程如下:
打開一個現有的文件
打開/創建輸出文件
創建GZipStream對象
逐字節讀源文件,并把它傳遞到GZipStream
使用GZipStream寫入到輸出文件流
代碼實現
1、壓縮字符串
?///?<summary>///?壓縮字串,回傳?Base64?結果///?</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;}運行結果測試,源文件經過壓縮大小只有120字節,而解壓后,源文件與解壓后txt的大小一致
總結
以上是生活随笔為你收集整理的使用GZipStream实现压缩和解压缩的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在 C#9 中使用 static 匿
- 下一篇: MongoDB,凉凉?