C# Deflate压缩字节数组(和java压缩结果一样)利用zlib.net对文件进行压缩
今天在对接一个三方接口时,需要传一个附件数据,附件需要使用Deflate压缩算法压缩后的文件二进制流,再进行base64编码后的字符串。
刚开始使用的官方自带的System.IO.Compression.DeflateStream方式,结果不管怎么改变CompressionLevel级别,压缩结果始终和java的压缩结果不一致,结果不一致就导致三方接口在解压的时候提示解压失败。
public static byte[] Compress(byte[] inputBytes) { using (MemoryStream ms = new MemoryStream()) { using (DeflateStream deflateStream = new DeflateStream(ms, CompressionLevel.Optimal, true)) { deflateStream.Write(inputBytes, 0, inputBytes.Length); } return ms.ToArray(); } }
解决方案为使用zlib.net包进行压缩
public static byte[] Compress(byte[] inputBytes) { using (MemoryStream ms = new MemoryStream()) { // 创建 ZOutputStream 实例来进行压缩 using (var zlibStream = new ZOutputStream(ms, zlibConst.Z_DEFAULT_COMPRESSION)) { // 将输入数据写入 ZOutputStream 进行压缩 zlibStream.Write(inputBytes, 0, inputBytes.Length); } // 获取压缩后的数据 return ms.ToArray(); } }
这个方式压缩的结果就能和java的压缩结果保持一致了。