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

2021/7/3 22:23:49

本文主要是介绍C#使用System.IO.Compression 处理Zlib Deflate 格式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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#

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

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

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



这篇关于C#使用System.IO.Compression 处理Zlib Deflate 格式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程