我需要对一个文件做二进制差分压缩,我有一个文件的起始点,在之后的每次更改我都记录文件的二进制的差分,这样就可以通过起始点和差分文件计算修改后的文件。通过二进制差分可以用来提高文件保存磁盘读写速度,也可以减少软件自动更新需要的文件大小

在 QQ 和 Chrome 等软件更新就使用这个技术,通过二进制差分方法下载差分文件,然后用差分文件和当前版本计算出新版本,将新版本写入文件。这样做的优势在于每次版本的二进制更改的内容都不多,此时可以减少进行 OTA 下载的文件大小

而在弱网的传输也是,这里的弱网是网络下载速度很慢的环境,需要更新某些文件。如游戏端的资源文件,在游戏端为了提升性能,会将资源文件合并为一个文件,在游戏需要更新时候,如果更新整个文件,下载的内容将会很多,在移动端也许用户使用的是流量下载。因此优化方法是读取这个资源的二进制差分文件,只下载之前二进制文件不存在的二进制内容,然后根据现有的二进制文件计算出新的版本的文件

本文使用的算法请看 二进制数据差异算法 用于减小OTA内容 这些算法相关的也没有什么内容

和 BSDiff 这个二进制压缩算法相比,本文使用的方法更适合做 dotnet 的更新程序,测试效果将会更好。但是存在的缺点是如果文件比较大,那么计算出二进制差异文件的时间将会很长。这里说的计算时间指的是服务器端根据两个版本的文件,计算出二进制差异文件。在客户端下载了二进制差异文件,然后通过本地的文件计算出新的版本的文件的速度依然是很快的

本文的算法如果作为 .NET 软件的 OTA 自动更新使用,需要构建的时候开启确定性构建,请看 Roslyn 的确定性构建 - walterlv

可以在 csproj 添加下面代码

<Project><PropertyGroup><Deterministic>true</Deterministic></PropertyGroup>
</Project>

本文代码放在 github 欢迎小伙伴访问

我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入

如有不方便在博客评论的问题,可以加我 QQ 2844808902 交流


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

dotnet 进行二进制差分压缩文件相关推荐

  1. FTP压缩文件上传到HDFS大小不一致的问题说明(FTP传输模式)

    1.问题:将ftp文件服务器上的压缩文件通过内存流直接写入HDFS内,却发现文件不一致,MD5SUM校验也不一致. 2.分析: FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式. 1)A ...

  2. java压缩文件读取_用Java读取/写入压缩和非压缩文件

    java压缩文件读取 这篇文章的主要原因是尝试不要重复自己( DRY ),因为通常,我会遇到递归的需求,即读写压缩的和非压缩的文件(主要是JSON和CSV). 首先让我们看看如何读取文本文件. 注意我 ...

  3. 用Java读取/写入压缩和非压缩文件

    这篇文章的主要原因是尝试不重复自己( DRY ),因为通常,我会遇到读写压缩和非压缩文件(主要是JSON和CSV)的递归需求. 首先让我们看看如何读取文本文件. 注意我正在使用(相对较小的)文本文件, ...

  4. linux 二进制差分工具,打造Android万能的软件更新库

    今日科技快讯 阿里星球今天在苹果商店发布的更新动态显示,其将在近期停止APP内的音乐服务,用户可以通过新版本内的指引和说明,导出本地音乐.这意味着上线八个月后,阿里星球做出了一个重大决定:停止音乐服务 ...

  5. 《Python Cookbook 3rd》笔记(5.7):读写压缩文件

    读写压缩文件 问题 你想读写一个 gzip 或 bz2 格式的压缩文件.PS: zip格式的用zipfile模块 解法 gzip 和 bz2 模块可以很容易的处理这些文件.两个模块都为 open() ...

  6. python zipfile教程_Python中zipfile压缩文件模块的基本使用教程

    zipfile Python 中 zipfile 模块提供了对 zip 压缩文件的一系列操作. f=zipfile.ZipFile("test.zip",mode="&q ...

  7. python读压缩文件内容_Python读写压缩文件的方法

    问题 你想读写一个gzip或bz2格式的压缩文件. 解决方案 gzip 和bz2模块可以很容易的处理这些文件. 两个模块都为 open()函数提供了另外的实现来解决这个问题. 比如,为了以文本形式读取 ...

  8. java压缩文件夹(含有空文件夹)

    两种实现方式: java.util.zip.ZipOutputStream org.apache.tools.ant 注意 最初采用java.util.zip.ZipOutputStream的方式, ...

  9. ssis zip压缩文件_SSIS平面文件与原始文件

    ssis zip压缩文件 In this article, we will give an overview of using Flat Files and Raw Files in SSIS, th ...

最新文章

  1. 关于比特币现金的一些误区
  2. 踩坑子Module引用aar
  3. LiveVideoStack成立5周年生日快乐!一路走来,感谢有你!
  4. 有这些好习惯,可以让你悄悄变优秀
  5. 中小企业ERP实施的项目管理
  6. 前端学习(2813):小程序开发前的环境搭建
  7. python面试题总结(2)--编码规范
  8. 浙江理工大学机械复试c语言真题,2016年浙江理工大学机械与自动控制学院计算机应用基础)之C程序设计复试笔试最后押题五套卷...
  9. 快播资源哪里跑(逆向)
  10. 显卡的优化以提高计算机性能作用,事实:[图形卡]黄卡驱动的“优化以提高计算性能”问题,只需进行简单测试即可...
  11. 贪心算法——汽车加油问题
  12. 斗地主的两种发牌方式
  13. Python3学习笔记之-学习基础(第三篇)
  14. 从ResNet、DenseNet、ResNeXt、SE Net、SE ResNeXt 演进学习总结
  15. 虫口模型 matlab,虫口模型的研究与教学设计.PDF
  16. 什么是网络爬虫,我们为什么要学习网络爬虫?
  17. 如何搭建量化投资研究系统之三(工具篇quantstrat)
  18. 柔性供应链是个伪命题吗?
  19. 深入 GalCon:Python、游戏开发和人工智能
  20. 1.Pytorch3d教程——介绍

热门文章

  1. error: AC_CONFIG_MACRO_DIRS([m4]) conflicts with ACLOCAL_AMFLAGS=-I m4 解决方法
  2. GD32F303固件库开发
  3. 练习4-7 求e的近似值 (15 分)
  4. 熊瞎子错把虎斑猫看成老虎
  5. 俄外长:想谈和平条约,日本必须承认俄对岛屿主权
  6. 58同城如何摸石头过河?
  7. 需要访问其他服务器信息吗,设置服务器访问其它电脑吗
  8. 奥塔在线:Centos下使用rpm方式安装crontab服务
  9. eclipse mdt java工程_Atitit.uml2 api 的编程代码实现设计uml开发 使用eclipse jar java 版本...
  10. EasyExcel报错com.alibaba.excel.exception.ExcelGenerateException: java.lang.ExceptionInInitializerError