前言
上一章我们介绍了开源工具Xdelta3的使用,这章我们来介绍一下Xdelta3的增量指令。
首先我们回顾一下,Xdelta3是将源文件
与目标文件
进行比较差分,生成一个增量文件
,这个增量文件
的大小理论上要小于目标文件
,这样使用增量更新才有意义。
那这个增量文件
里包含了什么呢?其实主要就是一堆的增量指令,在解码增量文件
时,就是根据这些增量指令来生成新文件(即目标文件)
。
简单来说,就是增量指令指示了目标文件
中数据内容的处理。
增量指令
增量指令也称delta指令,Xdelta3中定义了三种增量指令,分别是:COPY
、ADD
、RUN
,我们一个个介绍。
- COPY(size, addr):该指令有两个参数,一个是长度size,一个是要复制数据的起始地址addr。
COPY指令的作用是从地址addr开始拷贝一段长度为size的数据到目标文件
中,要求这段数据要包含在源文件
或目标文件
已生成的字段中,且不能同时包含,即这段数据要么来自源文件
,要么来自目标文件
。 - ADD(size, str):该指令有两个参数,一个是长度size,一个是长度为size的字符串str。
ADD指令的作用是添加一段长度为size的字符串str到目标文件
中,通常情况下,该字符串str既不包含在源文件
中,也不包含在目标文件
已生成的字段中。 - RUN(size, char):该指令有两个参数,一个是长度size,一个是字符char。
RUN指令的作用是将字符char重复添加size次,这个指令的结果是一段连续重复的单字符。例如RUN(4, a)的结果就是添加一串“aaaa”的字符串到目标文件
中。
需要顺带一提的是,Xdelta3中对于源文件
和目标文件
的位置有着特殊的约定。
假设源文件S
的长度为x,目标文件T
的长度为y,那么解码增量文件
生成目标文件
时的文件位置关系如下图所示:
由图可知,