
下面是内存溢出 jb51.cc 通过网络收集整理的代码片段。
内存溢出小编现在分享给大家,也给大家做个参考。
有时候我们需要去压缩数据 如视频/音频/内容 等信息 不少应用于套接字编程 不过微软为我 们提供了一个用于解压缩的类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,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,512)) > 0;) buf.Write(buffer,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,ref output_used) != 0) Console.Writeline("error"); // 解压失败 DestroyCompression(hContext); // 销毁正文对象 return buffer; } 不过看来看去我还是认为用GZipStream要人性化的多使用API也只是用在C++或E语言的情况下否则 我人也为也没有任何必要搞那么麻烦去写一个利用GZip.dll中导出的函数进行文件的解压缩。 以上是内存溢出(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
总结以上是内存溢出为你收集整理的C#实现GZip 压缩 / 解压全部内容,希望文章能够帮你解决C#实现GZip 压缩 / 解压所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)