架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 18288|回复: 3

[资料] .net/c# GZipStream 数据压缩

[复制链接]
发表于 2017-11-13 15:30:52 | 显示全部楼层 |阅读模式

在进行文件存储或者数据传输时,为了节省空间流量,需要对数据或文件进行压缩。在这里我们讲述通过C#实现数据压缩。

GZipStream压缩
微软提供用于压缩和解压缩流的方法。

此类表示 GZip 数据格式,它使用无损压缩和解压缩文件的行业标准算法。 这种格式包括一个检测数据损坏的循环冗余校验值。 GZip 数据格式使用的算法与 DeflateStream 类的算法相同,但它可以扩展以使用其他压缩格式。 这种格式可以通过不涉及专利使用权的方式轻松实现。

可以使用许多常见的压缩工具对写入到扩展名为 .gz 的文件的压缩 GZipStream 对象进行解压缩;但是,此类原本并不提供用于向 .zip 存档中添加文件或从 .zip 存档中提取文件的功能。

DeflateStream 和 GZipStream 中的压缩功能作为流公开。 由于数据是以逐字节的方式读取的,因此无法通过进行多次传递来确定压缩整个文件或大型数据块的最佳方法。 对于未压缩的数据源,最好使用 DeflateStream 和 GZipStream 类。 如果源数据已压缩,则使用这些类时实际上可能会增加流的大小。
代码如下:

  1. /// <summary>
  2.         /// 压缩字节数组
  3.         /// </summary>
  4.         /// <param name="str"></param>
  5.         public static byte[] Compress(byte[] inputBytes)
  6.         {   
  7.             using (MemoryStream outStream = new MemoryStream())
  8.             {
  9.                 using (GZipStream zipStream = new GZipStream(outStream, CompressionMode.Compress, true))
  10.                 {
  11.                     zipStream.Write(inputBytes, 0, inputBytes.Length);
  12.                     zipStream.Close(); //很重要,必须关闭,否则无法正确解压
  13.                     return outStream.ToArray();
  14.                 }
  15.             }
  16.         }

  17.         /// <summary>
  18.         /// 解压缩字节数组
  19.         /// </summary>
  20.         /// <param name="str"></param>
  21.         public static byte[] Decompress(byte[] inputBytes)
  22.         {

  23.             using (MemoryStream inputStream = new MemoryStream(inputBytes))
  24.             {
  25.                 using (MemoryStream outStream = new MemoryStream())
  26.                 {
  27.                     using (GZipStream zipStream = new GZipStream(inputStream, CompressionMode.Decompress))
  28.                     {
  29.                         zipStream.CopyTo(outStream);
  30.                         zipStream.Close();
  31.                         return outStream.ToArray();
  32.                     }
  33.                 }

  34.             }
  35.         }
复制代码






上一篇:nginx access_log 日志完全关闭
下一篇:美国洛杉矶_16核_96G内存_250M_550元
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2022-3-15 13:03:24 | 显示全部楼层
学习学习
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2023-5-7 21:03:03 | 显示全部楼层
.NET Core 精简版

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2023-9-17 10:47:10 | 显示全部楼层
.NET 6 测试 Gzip 和 Brotli 算法
https://www.itsvse.com/thread-10663-1-1.html
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-10-8 11:46

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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