首页 > 编程语言 >C# Deflate压缩字节数组(和java压缩结果一样)利用zlib.net对文件进行压缩

C# Deflate压缩字节数组(和java压缩结果一样)利用zlib.net对文件进行压缩

时间:2024-08-20 16:07:59浏览次数:9  
标签:java MemoryStream inputBytes C# 压缩 ms new

今天在对接一个三方接口时,需要传一个附件数据,附件需要使用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的压缩结果保持一致了。

标签:java,MemoryStream,inputBytes,C#,压缩,ms,new
From: https://www.cnblogs.com/bookobe/p/18369597

相关文章

  • [Java基础]int的表示范围
    在java基础类型中,int类型占四个字节,而每个字节在内存中占8位(8byte),所以可以使用共4X8=32个位数来存储该类型,也就是四个八位的二进制数,所以有了以下说法在计算机中,它的二级制表示为四个长度为8的二进制数,00000000000000000000000000000000,不了解的同学可以补一下原码,反码和补......
  • CSS Grid布局 速查表
    grid概念容器和项目:采用网格布局的区域,称为"容器"(container)。容器内部采用网格定位的子元素,称为"项目"(item)行和列:容器里面的水平区域称为"行"(row),垂直区域称为"列"(column)行和列的交叉区域,称为"单元格"(cell)网格线:划分网格的线,称为"网格线"(gridline)。水平网格线划分出行,垂直网......
  • ansible include_tasks示例
    目录include_tasks导入任务include_tasks拉取ansible代码示例include_tasks导入任务任务文件只包含任务,作用主机范围由playbook.yaml决定include_tasks.yaml----name:restartmemcachedservice:name:memcachedstate:restartedplaybook.yaml----h......
  • CADMATIC许可证续费
    在数字化时代,CADMATIC软件已成为工程设计和制造业领域的核心工具。为了保持竞争优势,企业需要确保CADMATIC软件的持续使用。而CADMATIC许可证续费,则是确保软件持续稳定运行的关键。本文将为您揭示CADMATIC许可证续费的必要性,以及如何顺利完成许可证续费,帮助您在竞争激烈的市场中保......
  • java+vue计算机毕设健身信息管理系统【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着现代生活节奏的加快,人们对健康生活的追求日益增强,健身已成为许多人日常生活不可或缺的一部分。传统的健身管理方式往往存在效率低下、信息不透明......
  • java+vue计算机毕设紧急救援物资分配系统【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着自然灾害与突发事件的频发,紧急救援行动的高效性与准确性成为了衡量社会应急管理体系成熟度的重要标志。在这些紧急情况下,救援物资的及时分配直接......
  • java+vue计算机毕设考研论坛网站【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景:在当今社会,随着高等教育的普及和就业竞争的日益激烈,考研已成为众多学子提升自我、追求更高学术成就的重要途径。然而,考研信息的繁杂与分散给考生带来......
  • java+vue计算机毕设科研文献管理系统【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着科研活动的日益频繁与深入,科研文献的数量呈爆炸性增长,如何高效地管理、检索和利用这些文献成为科研人员面临的重要挑战。传统的文献管理方式,如纸......
  • java学习路线
    【JAVA简介】Java已经连续多年占据编程语言榜首,其在后台开发中的占有率,地位不可撼动!Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,......
  • 2024年华为OD目录,D卷&C卷,E卷即将更新!
    序言  本专栏收录的华为OD题目都会持续优化并且持续更新最新题目,一次购买,终生享受。2024年,华为OD机试已经启用了D卷,目前D卷和C卷的题目是一样的。我身边有很多同学通过本专栏已经成功上岸华为的OD员工,有同学成功转正为华为正式员工。根据内部消息,华为OD今年可能会使用E......