8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

最近刚刚做完ReactNative基于微软的CodePush进行热更新,可是发现一个问题就是,如果每次更新太慢,一个原因可能是微软的CodePush的服务器在国外,那么如何不依赖微软的CodePush服务器实现增量更新呢?看另一篇博客ReactNative之增量升级方案,这里主要针对如何实现增量补丁的打包,以及如何将增量包和旧包合并成新包,通过bsdiff技术实现,下面针对Mac、iOS和Android三个平台进行一一讲解。

bsdiff介绍

bsdiff是一种二进制差分工具,有bsdiff和bspatch组成,将oldfile和newfile做二进制数据差分(即bsdiff操作),得到更新部分(patch文件),再与oldfile进行合并(bspatch操作)成newfile。

废话不多说,先撸一遍代码再说。

Mac下使用bsdiff打开终端安装bsdiff1$ brew install bsdiff使用bsdiff生成xxx.patched补丁文件1$ bsdiff ./Desktop/test/hot_old.zip ./Desktop/test/hot_new.zip ./Desktop/test/hot.patched

使用bspatch生成新包文件1

2# 注意这里的文件路径

$ bspatch ./Desktop/test/hot_old.zip ./Desktop/test/hot_new_patch.zip ./Desktop/test/hot.patched

验证生成的新包是否正确,通过md5值是否相同,相同则生成正确1

2

3

4

5$ md5 ./Desktop/test/hot_new.zip

MD5 (./Desktop/test/hot_new.zip) = bd6c61e552e913d563bc3b16b82fb994

$ md5 ./Desktop/test/hot_new_patch.zip

MD5 (./Desktop/test/hot_new_patch.zip) = bd6c61e552e913d563bc3b16b82fb994

iOS使用bsdiff进行文件资源增量更新(bsdiff/bspatch)

下载bsdiff bzip2文件

iOS集成(xcode10.2)新建一个工程,将下载好的bsdiff、bzip2导入工程中,大致内容如下

编译工程,会报如下错误,意料之中,大致原因是因为存在相同的main函数,我们只需要按照提示一步一步修改方法名字就可以了。

解决办法如下,这里只演示修改一个文件

在编译发现除了main函数重名以外,还有一个错误如下所示

解决办法如下:我们查看bzip2.c和bzip2recover.c,搜索progName字段,发现又是重名了,那么修改即可,这里不做演示,本项目是将bzip2recover.c文件的progName改为progNameRecover再次编译,恭喜你编译成功了~,不成功你找我。

因为bsdiff为C语言编写,oc引用c语言,需要新建一个.h文件,在.h文件中引用bsdiff.c和bspatch的方法(该方法名是我讲main方法改名后的方法名)

并且还需要在bsdiff.c和bspatch.c文件中#include "BsdiffTool.h"

下面进行本地测试,我们本地创建两个文件夹,大致内容如下,然后打包成zip,然后拖入工程中

调用bsdiff方法,生成补丁包patch,项目命名为hot_bsdiff1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26/**

生成增量补丁patch包

参数一: 固定字符串

参数二: oldfile文件路径

参数三: newfile文件路径

参数四: 合成patch的文件路径

*/

- (void)bsdiff

{

const char *argv[4];

argv[0] = "bsdiff";

// old path

NSString *oldPath = [NSString stringWithFormat:@"/%@/%@",[NSBundle mainBundle].bundlePath, @"hot_old.zip"];

argv[1] = [oldPath UTF8String];

// new path

NSString *newPath = [NSString stringWithFormat:@"/%@/%@",[NSBundle mainBundle].bundlePath, @"hot_new.zip"];

argv[2] = [newPath UTF8String];

// patched path

argv[3] = [[self createFileWithFileName:@"hot_bsdiff"] UTF8String];

int result = BsdiffUntils_bsdiff(4, argv);

NSLog(@"bsdiff结果:%d",result);

}

此时运行项目,你会发现document路径下会出现一个hot_bsdiff文件,这个文件就是oldfile和newfile文件二进制差分出来的文件,也就是需要更新的文件,但是这个文件不能直接使用,需要我们通过bspatch方法合成新的zip文件。调用bspatch方法,将hot_old.zip + hot_bsdiff(patch增量包) 生成新包hot_new.zip,项目命名为hot_bspatch_new.zip1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25/**

根据增量补丁patch包 + 旧包 生成新包

参数一: 为固定字符串

参数二: oldfile文件路径

参数三: oldfile与patch合成zip文件的路径

参数四: 差分出来的patch补丁包文件路径

*/

- (void)bspatch

{

const char *argv[4];

argv[0] = "bspatch";

// old path

NSString *oldPath = [NSString stringWithFormat:@"/%@/%@",[NSBundle mainBundle].bundlePath, @"hot_old.zip"];

argv[1] = [oldPath UTF8String];

// new path

argv[2] = [[self createFileWithFileName:@"hot_bspatch_new.zip"] UTF8String];

// patch path

argv[3] = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"hot_bsdiff"] UTF8String];

int result = BsdiffUntils_bspatch(4, argv);

NSLog(@"bspatch结果:%d",result);

}

运行项目,在对应路径下,就会看到hot_bspatch_new.zip文件,此时解压次安装包,内容如下

至此iOS集成bsdiff完成。

android使用bsdiff

后续更新

参考链接

bsdiff算法c语言实现,bsdiff的使用相关推荐

  1. bsdiff算法c语言实现,iOS 使用bsdiff进行资源文件增量更新(bsdiff / bspatch)

    bsdiff介绍: bsdiff是一种二级制差分工具,由bsdiff与bspatch组成, 将oldfile与newfile做二进制数据差分(bsdiff操作),得到更新的部分(patch文件),再与 ...

  2. 游戏差异更新—BSDiff算法解析

    为何需要差异更新? 差异更新即在软件更新时只更新差异化的部分,以达到用最小的下载量完成软件的更新需求.该思想由来已久,从刚接触电脑时的操作系统.应用软件快速更新功能或填补漏洞,到迭代更加频繁的移动应用 ...

  3. Qt移植bsdiff算法计算差分文件

    一.效果展示 二.原理解析 BSDiff的三个基本步骤如下: 1.对old文件中所有子字符串形成一个字典: 2.对比old文件和new文件,产生diffstring和extra string: 3.将 ...

  4. c语言贝叶斯分类,基于朴素贝叶斯分类器的文本分类算法(C语言)

    基于朴素贝叶斯分类器的文本分类算法(C语言) 基于朴素贝叶斯分类器的文本分类算法(C语言).txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情.#include ...

  5. 《数据结构与算法 C语言版》—— 3.8习题

    本节书摘来自华章出版社<数据结构与算法 C语言版>一 书中的第3章,第3.8节,作者:徐凤生,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 3.8习题 1名 ...

  6. 《数据结构与算法 C语言版》—— 2.5上机实验

    本节书摘来自华章出版社<数据结构与算法 C语言版>一 书中的第2章,第2.5节,作者:徐凤生,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.5上机实验 实 ...

  7. 《数据结构与算法 C语言版》—— 2.7习题

    本节书摘来自华章出版社<数据结构与算法 C语言版>一 书中的第2章,第2.7节,作者:徐凤生,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.7习题 1描 ...

  8. 狄斯奎诺算法 c语言,图的邻接表实现迪杰斯特拉算法(C语言).doc

    图的邻接表实现迪杰斯特拉算法(C语言) /*迪杰斯特拉算法(狄斯奎诺算法)解决的是从源点到其它所有顶点的最短路径问题*/ //算法实现: #include #include #define MAX 2 ...

  9. 每日算法C语言1-求某整数

    每日算法C语言 题目 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 程序分析: 在10万以内判断,先将该数加上100后再开方,再将该数加上168后再开方如 ...

最新文章

  1. UBUNTU 下查看所有的C库函数和查询 LINUX 编成必备
  2. python有哪些方向、应该怎么学-终于找到深圳学Python,有几个方向?怎么从一个方向学到底...
  3. 经典算法题每日演练——第十九题 双端队列
  4. java 变量单例_Java静态变量的用法:伪单例
  5. 把canvas标签里的图像下载成本地图片文件
  6. python中单行注释_Python中的单行、多行、中文注释方法
  7. thinkphp框架学习笔记(1)
  8. linux舵机控制程序,Linux PWM设备驱动及舵机控制
  9. matlab2c使用c++实现matlab函数系列教程-abs函数
  10. RestClient 接口测试实践
  11. 中国粮食安全问题及其应对措施
  12. 2021年国内PT站点汇总(中英文名称对照表)很全呦!
  13. word文档通配符换行_[Word] 学习笔记
  14. python功能主菜单_Pycharm主菜单学习
  15. 【Task08】Numpy学习打卡
  16. jabref java_Jabref安装及使用教程
  17. shell编程,脚本语言
  18. Linux 如何挂载nas盘到服务器
  19. [英语] 一个有两个谓语动词的句子之拆解与分析
  20. 耳机接口规则_线控缘何不兼容 3.5mm耳机接口的奥秘

热门文章

  1. Servlet的执行原理
  2. elasticsearch--拼音转换插件
  3. Redis 集群搭建(三):Docker 部署 Redis + Sentinel 高可用集群
  4. 循环冗余校验码CRC原理和实例
  5. nginx一篇入门:安装、静态网站部署、反向代理、负载均衡
  6. PageAdmin CMS网站建设实例:如何制作一个报名表?
  7. 【码农学编曲】RealGuitar3常用技法
  8. 高数 02.04隐函数的导数
  9. 让机器认知中文实体 — 复旦大学知识工场发布中文实体识别与链接服务
  10. java 怎么让打印信息换行?