有时候我们需要去压缩数据 如视频/音频/内容 等信息 不少应用于套接字编程 不过微软为我
们提供了一个用于解压缩的类GZIP不过这东西是很多年以前就开了源代码的 如RAR则是借
鉴其算法修改增强的一个东西不过我是没这个算法你们如果想要研究可以去Github上面去搜
索。我在这里提供两种放是压缩 不过真要让我最喜欢的可能还是MyZip。
        public static byte[] GZipCompress(byte[] bytes){using (MemoryStream ms = new MemoryStream()){using (GZipStream zs = new GZipStream(ms, CompressionMode.Compress))zs.Write(bytes, 0, bytes.Length);return ms.ToArray();}}
上面是压缩的部分 不过是简易形式 首先你需要创建或提供一个有效流 然后再new GZipStream(ms, CompressionMode.Compress))眨呀一看也还是挺简单的吗ms 是需要存放被压缩的文件流
然后再把你需要的进行压缩的字节写到GZipStream中最后在一个Dispose
       
public static byte[] GZipDecompress(byte[] bytes){using (MemoryStream ms = new MemoryStream(bytes)){using (GZipStream zs = new GZipStream(ms, CompressionMode.Decompress)){byte[] buffer = new byte[512];MemoryStream buf = new MemoryStream();for (int offset; (offset = zs.Read(buffer, 0, 512)) > 0;)buf.Write(buffer, 0, offset);return buf.ToArray();}}}
上面是解压部4.0可以使用GZipStream.CopyTo函数而不必向我上述有些麻烦的搞定问题
解压需要提供一个包含需要被解压的流数据 然后我们在 new GZipStream(ms, CompressionMode
.Decompress)只是两个提供的量不一 下面我们就开始读取解压流中的数据 不过解压流是没办法确定
长度的有些人是在已经压缩好的流中额外添加一部分流用于寄存原始长度 不过那些我想一般是用不到
        public byte[] GZipCompress(byte[] bytes){int hContext = 0; // 正文句柄int input_used = 0; // 未压缩尺寸int output_used = 0; // 压缩后尺寸InitCompression(); // 初始化压缩CreateCompression(ref hContext, GZIP_LVL); // 创建压缩正文byte[] buffer = new byte[512]; // 压缩缓冲区if (Compress(hContext, bytes, bytes.Length, buffer, 512, ref input_used, ref output_used, GZIP_LVL) != 0)Console.WriteLine("error"); // 压缩失败DestroyCompression(hContext); // 销毁正文对象return buffer;}
上面是通过GZip.dll进行压缩的代码部分 实际上Compress部分一般是要循环压缩字节的不过 只是简单
的给大家一个用法到没必要搞得那么专业 不过GZip.dll我记得是默认集成在Win8中毕竟是微软的玩意
        public byte[] GZipDecompress(byte[] bytes){int hContext = 0; // 正文句柄int input_used = 0; // 输入尺寸int output_used = 0; // 输出尺寸InitCompression(); // 初始化解压CreateCompression(ref hContext, GZIP_LVL); // 创建解压正文byte[] buffer = new byte[512]; // 解压缓冲区if (Decompress(hContext, bytes, bytes.Length, buffer, 512, ref input_used, ref output_used) != 0)Console.WriteLine("error"); // 解压失败DestroyCompression(hContext); // 销毁正文对象return buffer;}
不过看来看去我还是认为用GZipStream要人性化的多使用API也只是用在C++或E语言的情况下否则
我人也为也没有任何必要搞那么麻烦去写一个利用GZip.dll中导出的函数进行文件的解压缩。


C# GZip 压缩 / 解压相关推荐

  1. GZip 压缩解压 --- Pako 的压缩解压

    一.GZip压缩解压 package java调用JS;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream ...

  2. 字符串GZIP压缩解压

    c# /// <summary>/// 字符串压缩解压/// </summary>public class Zipper{public static string Compre ...

  3. Linux gzip压缩/解压 *.gz文件详解

    gzip 是linux中常见的压缩/解压工具,最常见的使用对象是*.gz格式的文件,这里简单介绍下它最常见的用法, GZIP(1) General Commands Manual GZIP(1) NA ...

  4. java gzip 压缩解压工具类

    因为觉得简单,本想抱着百度直接拿过来用的心态,结果发现网上的代码都转载自同一份,且埋了一个坑,你不仔细去梳理,很难发现. mark下需要注意的两点: 1. 编码/解码,压缩/解压缩是成对出现的 编码: ...

  5. gzip 压缩解压代码示例

    #include <zlib.h> #include <iostream> #include <stdint.h> #include <string.h> ...

  6. python3 gzip 压缩/解压

    import gzip t = gzip.compress('{"key":value""}'.encode())print(gzip.decompress(t ...

  7. Ubuntu使用gzip与bzip2与rar和tar压缩解压

    目录 1.gzip压缩解压 2.bzip2压缩解压 3.rar压缩解压 tar归档压缩与解压包 1.gzip压缩解压 因为都是系统自带的我们不需要安装: ls 看一下目录当前的文件,创建一个 touc ...

  8. java 使用gzip压缩和解压 传输文件必备

    java gzip 压缩解压工具类,开箱即用 gzip原理看我另外一篇介绍 压缩效果直接看图: package com.yeahmobi.datacheck.util;import java.io.* ...

  9. python压缩文件tar_python 实现tar文件压缩解压的实例详解

    python 实现tar文件压缩解压的实例详解 python 实现tar文件压缩解压的实例详解 压缩文件: import tarfile import os def tar(fname): t = t ...

最新文章

  1. 「它将改变一切」,DeepMind AI解决生物学50年来重大挑战,破解蛋白质分子折叠问题...
  2. 凯文·凯利:下一个5000天的12个必然趋势!
  3. 浅谈优化SQLServer数据库服务器内存配置的策略
  4. CentOS7.6 MySQL8环境搭建 配置远程登录 字符集UTF8 简单密码
  5. JAVA基础进阶day01
  6. 工作42:可以不参考原型
  7. C#笔记(五):文件和流
  8. FreeSql 访问 Oracle 解决大小写问题
  9. hdu 2523 SORT AGAIN
  10. NTP组播模式配置和日志信息发送到Linux日志主机的配置
  11. UOS安装谷歌浏览器并设置中文
  12. SOME/IP 协议介绍
  13. 苹果id注册邮箱方法
  14. 彻底删除vmware
  15. 【组合逻辑电路】——通用译码器
  16. ADO.NET如何读取Excel(转自晓风残月)
  17. andriod 连接数据库(MySQL)
  18. 微信支付服务商,可视化进件特约商户
  19. 用友BIP对接外部旺店通企业版奇门系统
  20. GifCam – 更好用的 gif 动画录制/剪辑工具

热门文章

  1. 非常吐血的有道迷题之一
  2. Matlab | 画出高中数学卷子上的几何题图
  3. NOIP模拟 洛阳怀(质因数分解)
  4. 自增主键用完了怎么办?
  5. 股份制银行的薪资对比
  6. 程旭/王蒙岑/袁梦婷/李建刚/熊武客座主编Frontiers根际微生物组专刊征稿(IF6)
  7. 【LeetCode】第930题——和相同的二元子数组(难度:中等)
  8. 冈萨雷斯《数字图像处理》学习笔记(九)形态学图像处理
  9. 开悟和通货膨胀!!!
  10. Proteus VSM Studio汇编 + 8位数码管时钟按键可调