前言
上一章我们详细解析了Xdelta3编码生成的增量文件
的Header部分,这一章我们继续来解析增量文件
的Window部分。
介绍
在开始解析之前,要先介绍一个概念。我们将解码后生成的新文件
称为解码时的目标文件
,它本质上和编码时的目标文件
是一样的。
一般情况下,Xdelta3在编码目标文件
时并不是一次性对整个目标文件
进行编码,而是将目标文件
分割成多个大小相近的目标窗口
,将每个目标窗口
依次单独编码;当然也有例外,当目标文件
足够小,小到用一个预设的窗口的大小就足以进行编码时,就不会再分割了。(关于窗口选择算法后续也会另开一篇文章进行详细讲解)
我们本章要讲解的Window部分就是由这多个目标窗口
组成的。Xdelta3在解码时依次解码目标窗口
,每个目标窗口
中都编码了一系列的增量指令
,解码这些增量指令
后就能获得目标文件
中的某一段数据,将所有窗口全部解码完后就获得了完整的目标文件
。
增量文件Window部分解析
介绍完基本概念后,我们先来看下Window部分的组成结构,然后再进行详细讲解:
Window部分
Window1
Win_Indicator - byte
|-[源数据的长度] - integer
|-[源数据的位置] - integer
该Window的增量指令部分
|-增量指令部分的长度 - integer
|-增量指令部分
|-该Window解码后的实际大小 - integer
|-Delta_Indicator - byte
|-data数组的长度L - integer
|-inst数组的长度M - integer
|-addr数组的长度N - integer
|-[adler32校验和] - integer
|-data数组 - L bytes
|-inst数组 - M bytes
|-addr数组 - N bytes
Windo