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的压缩结果保持一致了。

posted @ 2024-08-20 15:58  zhut96  阅读(64)  评论(0编辑  收藏  举报