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://*.com/questions/39939869/data-format-for-system-io-compression-deflatestream#

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

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

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

上一篇:Java int 转 String 类型,java类型转换


下一篇:设计模式-23种设计模式-行为型-策略模式