[差量更新系列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已被解压的部分和未被解压的部分执行。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值