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#
-----------------------------------------------------------------我是分割线--------------------------------------------------------------
看完了觉得不错就点个赞或者评论下吧,感谢!!!
如果本文哪里有误随时可以提出了,收到会尽快更正的
标签:Compression,C#,data,Zlib,flag,new,DeflateStream,MemoryStream 来源: https://blog.csdn.net/qq_42016346/article/details/118444716