在进行泛灵犀功能的测试时,需要准备版本词表的diff二进制文件,以用来完善单元测试,因此尝试了解了下,二进制的差分工具Xdelta 3。

40f6df1e9a13479d5477ad972fef11db.gif

Xdelta3是一个二进制的diff 工具,同时又兼具了patch 打包功能,diff 和 patch 是很有用的一对工具,使用这对工具可以获取更新文件与历史文件的差异,并将更新应用到历史文件上,从数学的角度来看,diff就是两个集合的差运算,patch就是对两个集合的和运算。在实现上,我们通常将它们结合起来实现生成补丁以及应用补丁的目的。如果要处理的不是文本文件,是二进制文件,我们可以使用一个专门用来处理二进制文件的工具–Xdelta3。

40f6df1e9a13479d5477ad972fef11db.gif

Xdelta3基于一种被广泛使用的差量更新算法,它在操作上既有对新文件和旧文件的差分又有对产生的 patch包进行压缩,我们将产生patch包的过程统称为加密,而将合成新文件的过程统称为解密。Xdelta3和经典的压缩算法LZ'77一样,也是将source file划分成一个个不相交而又连续的window,然后进行encoding和decoding。

Xdelta3在产生patch包的时候,主要依靠三个方面:

1.采用Vcdiff格式编码,节省patch包字节;

2.从target file和source file的内容上做差分;

3.对patch包进行压缩。

40f6df1e9a13479d5477ad972fef11db.gif

综上,Xdelta3使用基于字节的Vcdiff编码,可以在一种机器上encoding而在另一种机器上decoding,且encoding与decoding的过程相对独立,可移植性强。Patch包被分为三个独立的部分,便于使用不同的技术来分别改进它们的编码、压缩,并且支持二次压缩。每次设定的window的大小是一个重要的参数,window越大,最长字符串匹配的结果越精确,产生的patch可能越小,而时间内存消耗则变大;window越小,则反之。

40f6df1e9a13479d5477ad972fef11db.gif

用法示例(windows平台),

生成补丁:xdelta3.exe -v -e -s   第一个文件[母盘文件] 第二个文件[目标文件] 生成的差异文件[补丁文件]

应用补丁:xdelta3.exe -v -d -s   第一个文件[母盘文件] 生成的差异文件[补丁文件] 第二个文件[目标文件]

其中的-e -s 和-d -s 是必备参数,-v 输出详细处理信息,可有可无;每个文件之间都有一个空隔着。

eg:

xdelta3.exe-e -s 1502420593.scel 1502450540.scel 1534656271.xdelta

9c025221a1dd7ddd9453dc238bcc60bb.png

xdelta3.exe-v -d -s 1502420593.scel 1534656271.xdelta 1534656271.scel

92e883e3de51afd515c482d26a4123e8.png

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐