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#

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

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

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

system.io.compression.NET Framework中用于文件压缩和解压缩的命名空间。它提供了一组类和方法,用于处理不同类型的压缩算法和压缩文件。 在system.io.compression命名空间中,最常用的类是GZipStream和DeflateStream。这两个类可以实现对文件和流进行gzip和deflate压缩。GZipStream可以将数据压缩成gzip格式,而DeflateStream可以将数据压缩deflate格式使用这些类,我们可以轻松地将文件或数据进行压缩。首先,我们创建一个压缩流对象,然后将输入流传递给该对象。接下来,我们可以使用Write方法将数据写入压缩流中。最后,我们可以使用Flush和Close方法来完成压缩操作,并将压缩后的数据保存到文件或另一个流中。 除了压缩system.io.compression还提供了对压缩文件的解压缩的功能。例如,我们可以使用GZipStream和DeflateStream类的Read方法,从压缩文件中读取数据,并使用压缩流对象将数据解压缩。 在实际应用中,system.io.compression可以用于压缩和解压缩文件以减少存储空间和网络传输带宽的占用。它在一些需要处理大量数据且对存储和传输效率有要求的应用场景中非常有用,例如大型文件传输、数据备份和归档等。 总而言之,system.io.compression提供了一组实用的类和方法,使我们能够轻松地实现对文件和数据的压缩和解压缩操作。它是.NET Framework中非常实用和重要的命名空间之一。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值