QQ登录

只需要一步,快速开始

APP扫码登录

只需要一步,快速开始

手机号码,快捷登录

泡泡马甲APP 更多内容请下载泡泡马甲手机客户端APP 立即下载 ×
查看: 1589|回复: 0

[C#] 使用GZipStream实现压缩和解压缩

[复制链接]

等级头衔

积分成就    金币 : 2806
   泡泡 : 1516
   精华 : 6
   在线时间 : 1244 小时
   最后登录 : 2024-5-5

丰功伟绩

优秀达人突出贡献荣誉管理论坛元老

联系方式
发表于 2023-3-6 14:09:54 | 显示全部楼层 |阅读模式
       做项目涉及到存入到数据库或者http传输的数据量比较大,这个时候,就需要考虑在存入数据库或者发送传输之前,将数据压缩下,当从数据库中取出时,再解压还原数据。特地找了下发现有GZipStream可以实现这个功能。此类表示gzip数据格式,该格式使用行业标准算法进行无损文件压缩和解压缩。该格式包括用于检测数据损坏的循环冗余校验值。gzip数据格式使用与DeflateStream类相同的算法,但可以扩展为使用其他压缩格式。该格式很容易以专利未涵盖的方式实施。从.NET Framework 4.5开始,DeflateStream类使用zlib库进行压缩。因此,与.NET Framework的早期版本相比,它提供了更好的压缩算法,并且在大多数情况下,提供了较小的压缩文件。) j3 m  a! \4 N/ D: ^& }2 a
GZipStream使用的一般流程如下:% }) n# f( g3 p
  • 打开一个现有的文件
  • 打开/创建输出文件
  • 创建GZipStream对象
  • 逐字节读源文件,并把它传递到GZipStream
  • 使用GZipStream写入到输出文件流
    9 o; h1 |3 [2 U- F3 v
代码实现
5 ~- @7 T  Y' M- t0 D* N" U1、压缩字符串8 R# B6 W& O$ K
  1.         /// <summary>
  2.         /// 压缩字符串,回传 Base64 结果
  3.         /// </summary>
  4.         /// <param name="text"></param>
  5.         /// <returns></returns>
  6.         public static string ZipText(string text)
  7.         {
  8.             byte[] inputBytes = Encoding.UTF8.GetBytes(text);
  9.             return ZipText(inputBytes);
  10.         }
  11.         public static string ZipText(byte[] inputBytes)
  12.         {
  13.             using (MemoryStream outputStream = new MemoryStream())
  14.             {
  15.                 using (GZipStream gs = new GZipStream(outputStream, CompressionMode.Compress))
  16.                 {
  17.                     gs.Write(inputBytes, 0, inputBytes.Length);
  18.                 }
  19.                 byte[] outputBytes = outputStream.ToArray();
  20.                 string result = Convert.ToBase64String(outputBytes);
  21.                 return result;
  22.             }
  23.         }
2、解压缩字符串
0 c  Q, [6 E2 r- l0 P' e$ C! R, V
  1.         /// <summary>
  2.         /// 解压缩字符串
  3.         /// </summary>
  4.         /// <param name="zippedText"></param>
  5.         /// <returns></returns>
  6.         public static string UnzipZippedText(string zippedText)
  7.         {
  8.             if (String.IsNullOrEmpty(zippedText))
  9.             {
  10.                 return String.Empty;
  11.             }
  12.             string unzipedText = null;
  13.             try
  14.             {
  15.                 byte[] buffer = Convert.FromBase64String(zippedText);
  16.                 MemoryStream ms = new MemoryStream(buffer);
  17.                 GZipStream zipStream = new GZipStream(ms, CompressionMode.Decompress);
  18.                 using (StreamReader streamReader = new StreamReader(zipStream))
  19.                 {
  20.                     unzipedText = streamReader.ReadToEnd();
  21.                 }
  22.             }
  23.             catch (Exception ex)
  24.             {
  25.                 unzipedText = String.Empty;
  26.             }
  27.             return unzipedText;
  28.         }
运行结果测试,源文件经过压缩大小只有120字节,而解压后,源文件与解压后txt的大小一致
2 f9 K; O9 q. T3 I( K; {9 i5 i 1.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|paopaomj.COM ( 渝ICP备18007172号 )

GMT+8, 2024-5-17 08:17

Powered by paopaomj X3.4 © 2016-2024 sitemap

快速回复 返回顶部 返回列表