[差量更新系列2]Xdelta3原理学习笔记

本文介绍了Xdelta3这种优秀的差量更新算法,它结合了差分和压缩功能。Xdelta3通过Vcdiff格式编码、源文件与目标文件的差分以及patch包的压缩来生成更小的patch包。文章详细讲解了Vcdiff编码、目标文件与源文件的差分操作,以及patch包的压缩策略,展示了其高效性和可移植性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[差量更新系列2]Xdelta3原理学习笔记

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

设target file的大小为n,source file的大小为m,window的大小为w。由于Xdelta3在合成target file所消耗的时间为O(n),所消耗的内存大小为O(w),所以该压缩算法很适合被移植到手机中。

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

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

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

3.压缩patch包。

 

Vcdiff格式编码

这是一种基于字节的编码,可移植性强。采用128进制,用一个字节的低七位表示数字,最高位标记编码是否完成,如果没有编完,编码将扩展到下一个字节。如:

 

123456789

 

表示为128进制为:

 

58,111,26,21

 

在机器中表示如下:

 

               +-------------------------------------------------------+

                 | 10111010 | 11101111 |10011010 | 00010101 |

               +-------------------------------------------------------+

                  MSB+58  MSB+111 MSB+26  0+21

 

这里,原本要用9个字节,变成了4个字节。

 

Target file和Sourcefile的差分             

我们用S表示sourcefile的字符串,长度为S_len,T表示targetfile的字符串。差分用到add,run,copy三种命令。Xdelta3中,差分的copy命令不但可以在S与T之间执行,还可以在T已被解压的部分和未被解压的部分执行。

 

    ADD   x,s: 将一个长度为x的字符串s拷贝到T的当前位置。

    COPY  x,y: 当y<S_len时,从S[y]拷贝x个字符到T的当前位置;

                当y≥S_len时,从T[y-S_len]拷贝x个字符到T的当前位置。

    RUN   x,z:在T的当前位置加x个字符z。

 

我们给出例子如下:

    Source file  a b c d e f g h i j kl m n o p

     Target file  a b c d w x y z e f g h e f g h e f g h e f g h z z z z

 

       COPY  4, 0

       ADD   4, w x y z

       COPY  4, 4

       COPY  12, 24

       RUN  4, z

 

对于第四条命令,由于S的长度为16, 拷贝指针c指向T中的位置24-16=8,T当前位置的指针p指向位置12,执行T[p++]=T[c++]12次。

 

压缩Patch包

由上一部分可知,patch包中的内容可以由一系列add,run,copy命令表示。为了使patch包更小,这些命令必须被更有效的压缩。为了使压缩效率更高,Xdelta3将patch中的内容分了三部分,数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值