ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#使用System.IO.Compression 处理Zlib Deflate 格式

2021-07-03 20:59:30  阅读:317  来源: 互联网

标签:Compression C# data Zlib flag new DeflateStream MemoryStream


System.IO.Compression

        使用System.IO.Compression.DeflateStream进行压缩和解压时 ,DeflateStream 压缩后的数据开头比Zlib压缩的数据少两个字节,结尾比Zlib少四个字节

        所以以下解压的代码思路是在传入zlib格式的数据时把投两个字节和尾四个字节去掉以来匹配DeflateStream的格式,这种输出格式叫做 Raw Deflate 。压缩同理

代码如下:

//zlib标准头
78 01 - No Compression/low
78 9C - Default Compression
78 DA - Best Compression
public static byte[] MicrosoftDecompress(byte[] data)
        {
            //检查data头是否是zlib标准头
            int flag = (int)data[0] + (int)data[1];
            List<byte> new_data = data.ToList();
            //121,276,338分别为zlib的标头的十进制
            if (flag == 121 || flag == 276 || flag == 338) {       
                new_data.RemoveRange(0, 2);
                new_data.RemoveRange(new_data.Count() - 4, 4);
            }
            MemoryStream compressed = new MemoryStream(new_data.ToArray());
            MemoryStream decompressed = new MemoryStream();
            DeflateStream deflateStream = new DeflateStream(compressed, CompressionMode.Decompress); // 注意: 这里第一个参数同样是填写压缩的数据,但是这次是作为输入的数据
            
            deflateStream.CopyTo(decompressed);
            byte[] result = decompressed.ToArray();
            return result;
        }

参考文献:

https://www.cnblogs.com/mq0036/p/14711737.html

https://stackoverflow.com/questions/39939869/data-format-for-system-io-compression-deflatestream#

-----------------------------------------------------------------我是分割线--------------------------------------------------------------

看完了觉得不错就点个赞或者评论下吧,感谢!!!

如果本文哪里有误随时可以提出了,收到会尽快更正的

标签:Compression,C#,data,Zlib,flag,new,DeflateStream,MemoryStream
来源: https://blog.csdn.net/qq_42016346/article/details/118444716

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有