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

在 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. 黑色星期五阿里云向海淘输出双11技术
  2. linux工作常用软件
  3. java删除页面数据不刷新_Ajax请求数据与删除数据后刷新页面
  4. 重写__repr__与__str__函数
  5. 谈谈你对oracle,对Oracle的优化
  6. C# 判断文件/文件夹是否存在;
  7. Discrete Cosine Transform Network for Guided Depth Map Super-Resolution
  8. HTMLUnit爬虫模拟登录Linkedin
  9. Java--第2天--Html(二)
  10. 「建站指南」小白搭建网站一共分几步?
  11. 4-18快速生成get和set方法、格式化代码、数组的非空验证、订餐系统案例
  12. 学大伟业:学习物理竞赛的学生如何快速掌握所需要的高数知识?
  13. 一个初学者的计算天数的C语言代码
  14. excel换行按什么键_4种方法,教你excel怎么自动换行
  15. 微众银行“梦见”区块链
  16. 记一次IDEA克隆项目代码启动问题
  17. 各种LOGO设计标准尺寸
  18. 如何解决audiodg占用内存高(停止与重启audiodg服务)
  19. 实战例子:Solidity代码小失误导致池子里60万U被盗空
  20. 华为社招技术二面,总结复盘

热门文章

  1. 张一鸣和扎克伯格,一生之敌
  2. 点“删除”时,弹出“你是否确定要删除?”,确定后删除,取消后返回.
  3. Spring Cloud教程(十一)环境变化和刷新范围
  4. 包含重复元素的全排列
  5. FFmpeg 开发(12):Android FFmpeg 实现带滤镜的微信小视频录制功能
  6. 无线传感网的MAC层协议
  7. 信息奥赛一本通1312:【例3.4】昆虫繁殖
  8. 关于开源许可证的介绍
  9. 简易垂直搜索引擎的核心算法总结
  10. ESP32专栏八 NVS存储