差分文件的生成方法、还原方法及电子设备转让专利

申请号 : CN202210756209.5

文献号 : CN116028095B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王艳召张赠辉陈超黄九林

申请人 : 荣耀终端有限公司

摘要 :

本申请实施例提供了一种差分文件的生成方法、还原方法及电子设备。在该差分文件的生成方法中,服务器侧将每组增量更新数据中包括的Diff数据和Extra数据进行分块划分及压缩处理,并基于得到的各Diff数据压缩分块和各Extra数据压缩分块进行数据编码以生成差分文件。由此,终端侧进行差分文件还原处理时,可以将Diff数据压缩分块或Extra数据压缩分块作为一个独立的差分还原处理单元,使得终端侧的RAM内存消耗更小,进而终端侧能够通过较小的RAM内存空间实现差分数据还原功能。

权利要求 :

1.一种差分文件的生成方法,其特征在于,应用于服务器,包括:获取基于BSDiff算法生成的增量更新Patch数据;其中,所述Patch数据中包括至少一组增量更新数据,每组增量更新数据中包括差异Diff数据和/或新增Extra数据;

针对每组增量更新数据,将所述Diff数据按照分块尺寸划分,得到至少一个Diff数据分块,将所述Extra数据按照所述分块尺寸划分,得到至少一个Extra数据分块,并分别对每个所述Diff数据分块和每个所述Extra数据分块进行数据压缩,生成各Diff数据压缩分块和各Extra数据压缩分块;

其中,所述分块尺寸是根据电子设备能够申请用于差分文件还原的RAM内存空间的字节数确定的;所述RAM内存空间被划分为至少三个RAM内存区域;在所述至少三个RAM内存区域中:两个RAM内存区域占用的字节数相等,且所述两个RAM内存区域占用的字节数大于或等于所述分块尺寸,另外一个RAM内存区域用于运行数据压缩算法;

分别对每组增量更新数据中包括的各Diff数据压缩分块和各Extra数据压缩分块进行数据编码,生成与所述Patch数据对应的差分文件。

2.根据权利要求1所述的方法,其特征在于,当所述电子设备能够申请M字节RAM内存空间用于差分文件还原时,所述分块尺寸设置为(M‑N1‑N2*2)/2字节;

其中,电子设备在所述M字节RAM内存空间中划分第一RAM内存区域、第二RAM内存区域、第三RAM内存区域、第四RAM内存区域和第五RAM内存区域;

所述第二RAM内存区域和所述第四RAM内存区域分别为所述第一RAM内存区域和所述第三RAM内存区域的安全缓冲区域,所述安全缓冲区域占用N2字节的RAM内存;

所述第五RAM内存区域用于运行数据压缩算法,占用N1字节的RAM内存;

所述第一RAM内存区域和所述第三RAM内存区域均占用(M‑N1‑N2*2)/2字节的RAM内存。

3.根据权利要求1所述的方法,其特征在于,当所述电子设备能够申请M字节RAM内存空间为M字节用于差分文件还原时,所述分块尺寸设置为((M‑N1)/2‑N2)字节;

其中,电子设备在所述M字节RAM内存空间中划分第一RAM内存区域、第三RAM内存区域和第五RAM内存区域;

所述第五RAM内存区域用于运行数据压缩算法,占用N1字节的RAM内存;

所述第一RAM内存区域和所述第三RAM内存区域均占用(M‑N1)/2字节的RAM内存,在所述第一RAM内存区域和所述第三RAM内存区域中均包括N2字节的安全缓冲区域。

4.根据权利要求1所述的方法,其特征在于,将所述Diff数据按照分块尺寸划分,得到至少一个Diff数据分块,包括:将所述Diff数据按照分块尺寸划分,得到n1个Diff数据分块;

在所述n1个Diff数据分块中,前(n1‑1)个Diff数据分块的尺寸为所述分块尺寸,第n1个Diff数据分块的尺寸小于等于所述分块尺寸;

将所述Extra数据按照所述分块尺寸划分,得到至少一个Extra数据分块,包括:将所述Extra数据按照分块尺寸划分,得到n2个Extra数据分块;

在所述n2个Extra数据分块中,前(n2‑1)个Extra数据分块的尺寸为所述分块尺寸,第n2个Extra数据分块的尺寸小于等于所述分块尺寸。

5.根据权利要求1所述的方法,其特征在于,将所述Diff数据按照分块尺寸划分,得到至少一个Diff数据分块,包括:将所述Diff数据按照分块尺寸划分,得到n1个Diff数据分块;

在所述n1个Diff数据分块中,前(n1‑1)个Diff数据分块的尺寸为所述分块尺寸,第n1个Diff数据分块的尺寸小于等于所述分块尺寸,或者第n1个Diff数据分块的尺寸大于所述分块尺寸;

当所述第n1个Diff数据分块的尺寸大于所述分块尺寸时,所述第n1个Diff数据分块的尺寸与所述分块尺寸的差值,小于安全缓冲区内存尺寸的预设比例;

将所述Extra数据按照所述分块尺寸划分,得到至少一个Extra数据分块,包括:将所述Extra数据按照分块尺寸划分,得到n2个Extra数据分块;

在所述n2个Extra数据分块中,前(n2‑1)个Extra数据分块的尺寸为所述分块尺寸,第n2个Extra数据分块的尺寸小于等于所述分块尺寸,或者第n2个Extra数据分块的尺寸大于所述分块尺寸;

当所述第n2个Extra数据分块的尺寸大于所述分块尺寸时,所述第n2个Extra数据分块的尺寸与所述分块尺寸的差值,小于安全缓冲区内存尺寸的预设比例。

6.根据权利要求1所述的方法,其特征在于,所述差分文件的数据结构包括头部、控制块、以及通过所述控制块描述的Diff数据压缩分块和所述Extra数据压缩分块;其中,所述头部中填充所述差分文件的魔数与所述分块尺寸;

所述控制块中填充第一字节长度、第二字节长度和指针偏移量;所述第一字节长度为所述控制块描述的Diff数据压缩分块在数据压缩前的总字节长度,所述第二字节长度为所述控制块描述的Extra数据压缩分块在数据压缩前的总字节长度,所述指针偏移量用于确定在与所述差分文件对应的已有文件中的数据读取位置;

所述Diff数据压缩分块包括第一块头部和第一块数据,所述第一块头部中至少填充Diff数据压缩分块的字节长度,所述第一块数据中填充Diff压缩数据;

所述Extra数据压缩分块包括第二块头部和第二块数据,所述第二块头部中至少填充Extra数据压缩分块的字节长度,所述第二块数据中填充Extra压缩数据。

7.根据权利要求6所述的方法,其特征在于,所述控制块为控制压缩块;

其中,所述控制压缩块包括第三块头部和第三块数据,所述第三块头部中至少填充所述控制压缩块的字节长度,所述第三块数据中填充与所述第一字节长度、第二字节长度和指针偏移量对应的压缩数据。

8.根据权利要求6所述的方法,其特征在于,所述数据结构还包括尾部,所述尾部中包括校验字段,所述校验字段的值为目标文件的哈希值,所述目标文件为对所述差分文件进行还原得到的文件。

9.根据权利要求6所述的方法,其特征在于,所述头部中还包括数据压缩块尺寸字段,所述数据压缩块尺寸字段的值用于指示所述差分文件中各个数据压缩块的尺寸最大值。

10.根据权利要求6所述的方法,其特征在于,所述头部中还包括数据总长度字段,所述数据总长度字段的值用于指示目标文件中的数据总长度,所述目标文件为对所述差分文件进行还原得到的文件。

11.一种差分文件的还原方法,其特征在于,应用于电子设备中,包括:获取差分文件以及与所述差分文件对应的已有文件;其中,所述差分文件为根据如权利要求1‑10任一项所述的方法生成的,所述差分文件中的Diff数据是基于第一运算得到的;

根据所述差分文件的数据结构对所述差分文件进行解析,并按照解析顺序依次基于Diff数据压缩分块或Extra数据压缩分块进行数据还原处理;其中,每解析得到一个Diff数据压缩分块时,将所述Diff数据压缩分块包含的Diff数据与已有数据进行第二运算,得到第一目标数据,写入目标文件中;其中,所述已有数据为在所述已有文件中读取到的与所述Diff数据压缩分块匹配的数据,所述第二运算为所述第一运算的逆运算;

每解析得到一个Extra数据压缩分块时,对所述Extra数据压缩分块进行数据解压,得到第二目标数据,写入所述目标文件中;

在处理完成所有的Diff数据压缩分块和Extra数据压缩分块时,将所述目标文件作为与所述已有文件对应的升级文件。

12.根据权利要求11所述的方法,其特征在于,所述差分文件的头部中填充分块尺寸;

将所述Diff数据压缩分块包含的Diff数据与已有数据进行第二运算,得到第一目标数据,写入目标文件中,包括:将所述Diff数据压缩分块暂存在第一RAM内存区域中;

对所述Diff数据压缩分块进行数据解压处理,将得到的Diff数据分块暂存在第三RAM内存区域中;

在所述已有文件中读取与所述Diff数据分块对应的已有数据,并暂存在所述第一RAM内存区域中;

将所述第一RAM内存区域中的数据和所述第三RAM内存区域中的数据进行第二操作,所得的第一目标数据暂存在所述第三RAM内存区域或所述第一RAM内存区域中;

将在所述第三RAM内存区域或所述第一RAM内存区域中暂存的第一目标数据,写入所述目标文件中;

其中,所述第一RAM内存区域和所述第三RAM内存区域的尺寸为所述分块尺寸,且在所述第一RAM内存区域和所述第三RAM内存区域后均分配有安全缓冲区;

或者,所述第一RAM内存区域和所述第三RAM内存区域的尺寸为所述分块尺寸与所述安全缓冲区尺寸的累加和。

13.根据权利要求11所述的方法,其特征在于,所述差分文件的头部中填充分块尺寸;

对所述Extra数据压缩分块进行数据解压,得到第二目标数据,写入所述目标文件中,包括:将所述Extra数据压缩分块暂存在第一RAM内存区域中;

对所述Extra数据压缩分块进行数据解压处理,将得到的第二目标数据暂存在第三RAM内存区域中;

将在所述第三RAM内存区域中暂存的第二目标数据,写入所述目标文件中;

其中,所述第一RAM内存区域和所述第三RAM内存区域的尺寸为所述分块尺寸,且在所述第一RAM内存区域和所述第三RAM内存区域后均分配有安全缓冲区;

或者,所述第一RAM内存区域和所述第三RAM内存区域的尺寸为所述分块尺寸与所述安全缓冲区尺寸的累加和。

14.根据权利要求11所述的方法,其特征在于,所述差分文件的数据结构包括尾部,所述尾部中包括校验字段,所述校验字段的值为目标文件的哈希值;

将所述目标文件作为与所述已有文件对应的升级文件,包括:

在处理完成所有的Diff数据压缩分块和Extra数据压缩分块时,计算所述目标文件的哈希值;

如果所述目标文件的哈希值与所述校验字段的值匹配,则将所述目标文件作为与所述已有文件对应的升级文件。

15.根据权利要求11所述的方法,其特征在于,所述差分文件的头部中包括数据压缩块尺寸字段,所述数据压缩块尺寸字段的值用于指示所述差分文件中各个数据压缩块的尺寸最大值;

所述方法还包括:

每解析得到一个Diff数据压缩分块时,如果所述Diff数据压缩分块的尺寸大于所述数据压缩块尺寸字段的值,则停止对所述差分文件的数据还原处理;

每解析得到一个Extra数据压缩分块时,如果所述Extra数据压缩分块的尺寸大于所述数据压缩块尺寸字段的值,则停止对所述差分文件的数据还原处理。

16.根据权利要求11所述的方法,其特征在于,所述差分文件的头部中包括数据总长度字段,所述数据总长度字段的值用于指示目标文件中的数据总长度;

将所述目标文件作为与所述已有文件对应的升级文件,包括:

在处理完成所有的Diff数据压缩分块和Extra数据压缩分块时,计算所述目标文件的数据总长度;

如果所述目标文件的数据总长度与所述数据总长度字段的值匹配,则将所述目标文件作为与所述已有文件对应的升级文件。

17.根据权利要求11所述的方法,其特征在于,所述电子设备为轻量级设备,且所述电子设备的RAM内存空间小于第一预设阈值,或者,所述电子设备可用于进行差分文件还原的RAM内存空间小于第二预设阈值。

18.一种服务器,其特征在于,包括:

一个或多个处理器;

存储器;

以及一个或多个计算机程序,其中所述一个或多个计算机程序存储在所述存储器上,当所述计算机程序被所述一个或多个处理器执行时,使得所述服务器执行如权利要求1‑10中任一项所述的差分文件的生成方法。

19.一种电子设备,其特征在于,包括:

一个或多个处理器;

存储器;

以及一个或多个计算机程序,其中所述一个或多个计算机程序存储在所述存储器上,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行如权利要求

11‑17中任一项所述的差分文件的还原方法。

20.一种计算机可读存储介质,包括计算机程序,其特征在于,当所述计算机程序在电子设备上运行时,使得所述电子设备执行如权利要求1‑10中任一项所述的差分文件的生成方法,或者使得所述电子设备执行如权利要求11‑17中任一项所述的差分文件的还原方法。

说明书 :

差分文件的生成方法、还原方法及电子设备

技术领域

[0001] 本申请涉及智能终端技术领域,尤其涉及一种差分文件的生成方法、还原方法及电子设备。

背景技术

[0002] 为了完善终端设备的功能、增强设备稳定性、修补设备缺陷或漏洞(bug)时,往往需要对终端设备的固件进行升级。
[0003] 目前,通常采用空中下载(Over the Air,OTA)技术对终端设备进行在线固件升级。OTA升级方式主要包括整包升级和差分包升级。为了提升升级包传输效率及固件升级效率,终端设备多采用差分包升级方式,也即只针对固件的差异部分进行升级。
[0004] 其中,终端设备采用差分包升级方式进行在线固件升级时,首先需要对差分文件进行还原,而对差分文件的还原操作需要占用RAM(Random Access Memory,随机存取存储器)内存。因此,针对RAM资源受限的终端设备(例如穿戴式设备等),如何采用差分包升级的方式进行固件升级是需要解决的问题。

发明内容

[0005] 为了解决上述技术问题,本申请实施例提供一种差分文件的生成方法、还原方法及电子设备。在本申请实施例中,服务器侧将每组增量更新数据中包括的Diff数据和Extra数据进行分块划分及压缩处理,并基于得到的各Diff数据压缩分块和各Extra数据压缩分块进行数据编码以生成差分文件。由此,终端侧进行差分文件还原处理时,可以将Diff数据压缩分块或Extra数据压缩分块作为一个独立的差分还原处理单元,使得终端侧的RAM内存消耗更小,进而终端侧能够通过较小的RAM内存空间实现差分数据还原功能。
[0006] 第一方面,本申请实施例提供一种差分文件的生成方法。该方法应用于服务器,包括:服务器端获取基于BSDiff算法生成的增量更新Patch数据;其中,Patch数据中包括至少一组增量更新数据,每组增量更新数据中包括差异Diff数据和/或新增Extra数据;针对每组增量更新数据,服务器端将Diff数据按照分块尺寸划分,得到至少一个Diff数据分块,将Extra数据按照分块尺寸划分,得到至少一个Extra数据分块,并分别对每个Diff数据分块和每个Extra数据分块进行数据压缩,生成各Diff数据压缩分块和各Extra数据压缩分块;其中,分块尺寸是根据电子设备的RAM内存空间确定的;服务器端分别对每组增量更新数据中包括的各Diff数据压缩分块和各Extra数据压缩分块进行数据编码,生成与Patch数据对应的差分文件。
[0007] 其中,分块尺寸可以与电子设备可用于差分文件还原的RAM内存空间的尺寸确定的。示例性的,针对不同型号的电子设备生成差分文件时,分块尺寸可以采用不同的值。
[0008] 这样,由于差分文件的数据编码是基于Diff数据压缩分块和Extra数据压缩分块进行的,则电子设备对差分文件进行还原处理时可以将Diff数据压缩分块或Extra数据压缩分块作为一个独立的差分还原处理单元,使得终端侧的RAM内存消耗更小,进而终端侧能够通过较小的RAM内存空间实现差分数据还原功能。
[0009] 由此,根据本实施例提供的差分文件的生成方法得到的差分文件,适用于轻量级电子设备进行数据还原处理,也适用于其他可用于差分还原的RAM内存空间较小的其他电子设备进行数据还原处理。
[0010] 根据第一方面,当电子设备能够申请M字节RAM内存空间用于差分文件还原时,分块尺寸设置为(M‑N1‑N2*2)/2字节;其中,电子设备在M字节RAM内存空间中划分第一RAM内存区域、第二RAM内存区域、第三RAM内存区域、第四RAM内存区域和第五RAM内存区域;第二RAM内存区域和第四RAM内存区域分别为第一RAM内存区域和第三RAM内存区域的安全缓冲区域,安全缓冲区域占用N2字节的RAM内存;第五RAM内存区域用于运行数据压缩算法,占用N1字节的RAM内存;第一RAM内存区域和第三RAM内存区域均占用(M‑N1‑N2*2)/2字节的RAM内存。
[0011] 这样,服务器端可以根据电子设备的能力灵活调整分块尺寸的大小,提升了差分文件生成方法的适用性。
[0012] 根据第一方面,或者以上第一方面的任意一种实现方式,当电子设备能够申请M字节RAM内存空间为M字节用于差分文件还原时,分块尺寸设置为((M‑N1)/2‑N2)字节;其中,电子设备在M字节RAM内存空间中划分第一RAM内存区域、第三RAM内存区域和第五RAM内存区域;第五RAM内存区域用于运行数据压缩算法,占用N1字节的RAM内存;第一RAM内存区域和第三RAM内存区域均占用(M‑N1)/2字节的RAM内存,在(M‑N1)/2字节的RAM内存中,包括N2字节的安全缓冲区域。
[0013] 这样,服务器端可以根据电子设备的能力灵活调整分块尺寸的大小,提升了差分文件生成方法的适用性。
[0014] 根据第一方面,或者以上第一方面的任意一种实现方式,服务器端将Diff数据按照分块尺寸划分,得到至少一个Diff数据分块,可以包括:服务器端将Diff数据按照分块尺寸划分,得到n1个Diff数据分块;其中,在n1个Diff数据分块中,前(n1‑1)个Diff数据分块的尺寸为分块尺寸,第n1个Diff数据分块的尺寸小于等于分块尺寸。
[0015] 相应的,服务器端将Extra数据按照分块尺寸划分,得到至少一个Extra数据分块,可以包括:服务器端将Extra数据按照分块尺寸划分,得到n2个Diff数据分块;其中,在n2个Extra数据分块中,前(n2‑1)个Diff数据分块的尺寸为分块尺寸,第n2个Diff数据分块的尺寸小于等于分块尺寸。
[0016] 根据第一方面,或者以上第一方面的任意一种实现方式,服务器端将Diff数据按照分块尺寸划分,得到至少一个Diff数据分块,可以包括:服务器端将Diff数据按照分块尺寸划分,得到n1个Diff数据分块;其中,在n1个Diff数据分块中,前(n1‑1)个Diff数据分块的尺寸为分块尺寸,第n1个Diff数据分块的尺寸小于等于分块尺寸,或者第n1个Diff数据分块的尺寸大于分块尺寸;当第n1个Diff数据分块的尺寸大于分块尺寸时,第n1个Diff数据分块的尺寸与分块尺寸的差值,小于安全缓冲区内存尺寸的预设比例。
[0017] 相应的,服务器端将Extra数据按照分块尺寸划分,得到至少一个Extra数据分块,可以包括:服务器端将Extra数据按照分块尺寸划分,得到n2个Diff数据分块;其中,在n2个Extra数据分块中,前(n2‑1)个Diff数据分块的尺寸为分块尺寸,第n2个Diff数据分块的尺寸小于等于分块尺寸,或者第n2个Diff数据分块的尺寸大于分块尺寸;当第n2个Extra数据分块的尺寸大于分块尺寸时,第n2个Extra数据分块的尺寸与分块尺寸的差值,小于安全缓冲区内存尺寸的预设比例。
[0018] 这样,在对Diff数据和Extra数据进行分块划分时,允许最后一块数据分块的尺寸略大于分块尺寸,以此避免对较小的一块数据分块进行处理而浪费RAM内存资源。而且,由于电子设备进行差分文件还原时,申请的RAM内存空间中会包含安全缓冲区,所以超出分块尺寸的一些数据可以在安全缓冲区中进行处理,不会影响数据处理的准确性。
[0019] 根据第一方面,或者以上第一方面的任意一种实现方式,差分文件的数据结构包括头部、控制块、以及通过控制块描述的Diff数据压缩分块和Extra数据压缩分块;其中,[0020] 头部中填充差分文件的魔数与分块尺寸;
[0021] 控制块中填充第一字节长度、第二字节长度和指针偏移量;第一字节长度为控制块描述的Diff数据压缩分块在数据压缩前的总字节长度,第二字节长度为控制块描述的Extra数据压缩分块在数据压缩前的总字节长度,指针偏移量用于确定在与差分文件对应的已有文件中的数据读取位置;
[0022] Diff数据压缩分块包括第一块头部和第一块数据,第一块头部中至少填充Diff数据压缩分块的字节长度,第一块数据中填充Diff压缩数据;
[0023] Extra数据压缩分块包括第二块头部和第二块数据,第二块头部中至少填充Extra数据压缩分块的字节长度,第二块数据中填充Extra压缩数据。
[0024] 根据第一方面,或者以上第一方面的任意一种实现方式,控制块为控制压缩块;其中,控制压缩块包括第三块头部和第三块数据,第三块头部中至少填充控制压缩块的字节长度,第三块数据中填充与第一字节长度、第二字节长度和指针偏移量对应的压缩数据。
[0025] 根据第一方面,或者以上第一方面的任意一种实现方式,差分文件的数据结构还包括尾部,尾部中包括校验字段,校验字段的值为目标文件的哈希值,目标文件为对差分文件进行还原得到的文件。
[0026] 这样,电子设备对差分文件进行还原时,可以基于目标文件的哈希值对差分文件还原的准确性进行校验。
[0027] 根据第一方面,或者以上第一方面的任意一种实现方式,头部中还包括数据压缩块尺寸字段,数据压缩块尺寸字段的值用于指示差分文件中各个数据压缩块的尺寸最大值。
[0028] 这样,电子设备对差分文件进行还原时,可以基于数据压缩块尺寸字段对差分文件中解析得到的Diff数据压缩分块和Extra数据压缩分块的准确性进行校验。
[0029] 根据第一方面,或者以上第一方面的任意一种实现方式,头部中还包括数据总长度字段,数据总长度字段的值用于指示目标文件中的数据总长度,目标文件为对差分文件进行还原得到的文件。
[0030] 这样,电子设备对差分文件进行还原时,可以基于目标文件中的数据总长度对对差分文件还原的准确性进行校验。
[0031] 第二方面,本申请实施例提供了一种差分文件的还原方法。该方法应用于电子设备中,包括:电子设备获取差分文件以及与差分文件对应的已有文件;其中,差分文件为根据如第一方面以及第一方面的任意一种实现方式中的差分文件的生成方法而生成的,差分文件中的Diff数据是基于第一运算得到的;电子设备根据差分文件的数据结构对差分文件进行解析,并按照解析顺序依次基于Diff数据压缩分块或Extra数据压缩分块进行数据还原处理;其中,电子设备每解析得到一个Diff数据压缩分块时,将Diff数据压缩分块包含的Diff数据与已有数据进行第二运算,得到第一目标数据,写入目标文件中;其中,已有数据为在已有文件中读取到的与Diff数据压缩分块匹配的数据,第二运算为第一运算的逆运算;电子设备每解析得到一个Extra数据压缩分块时,对Extra数据压缩分块进行数据解压,得到第二目标数据,写入目标文件中;在处理完成所有的Diff数据压缩分块和Extra数据压缩分块时,电子设备将目标文件作为与已有文件对应的升级文件。
[0032] 示例性的,第一运算为减运算,第二运算为加运算。
[0033] 这样,电子设备对差分文件进行还原处理时可以将Diff数据压缩分块或Extra数据压缩分块作为一个独立的差分还原处理单元,使得终端侧的RAM内存消耗更小,进而终端侧能够通过较小的RAM内存空间实现差分数据还原功能。
[0034] 根据第二方面,差分文件的头部中填充分块尺寸。
[0035] 电子设备将Diff数据压缩分块包含的Diff数据与已有数据进行第二运算,得到第一目标数据,写入目标文件中,可以包括:电子设备将Diff数据压缩分块暂存在第一RAM内存区域中;电子设备对Diff数据压缩分块进行数据解压处理,将得到的Diff数据分块暂存在第三RAM内存区域中;电子设备在已有文件中读取与Diff数据分块对应的已有数据,并暂存在第一RAM内存区域中;电子设备将第一RAM内存区域中的数据和第三RAM内存区域中的数据进行第二操作,所得的第一目标数据暂存在第三RAM内存区域或第一RAM内存区域中;电子设备将在第三RAM内存区域或第一RAM内存区域中暂存的第一目标数据,写入目标文件中;
[0036] 其中,第一RAM内存区域和第三RAM内存区域的尺寸为分块尺寸,且在第一RAM内存区域和第三RAM内存区域后均分配有安全缓冲区。
[0037] 或者,第一RAM内存区域和第三RAM内存区域的尺寸为分块尺寸与安全缓冲区尺寸的累加和。
[0038] 根据第二方面,或者以上第一方面的任意一种实现方式,差分文件的头部中填充分块尺寸。
[0039] 电子设备对Extra数据压缩分块进行数据解压,得到第二目标数据,写入目标文件中,可以包括:电子设备将Extra数据压缩分块暂存在第一RAM内存区域中;电子设备对Extra数据压缩分块进行数据解压处理,将得到的第二目标数据暂存在第三RAM内存区域中;电子设备将在第三RAM内存区域中暂存的第二目标数据,写入目标文件中。
[0040] 其中,第一RAM内存区域和第三RAM内存区域的尺寸为分块尺寸,且在第一RAM内存区域和第三RAM内存区域后均分配有安全缓冲区;
[0041] 或者,第一RAM内存区域和第三RAM内存区域的尺寸为分块尺寸与安全缓冲区尺寸的累加和。
[0042] 电子设备在对差分文件进行还原时,可以基于在差分文件头部解析到的分块尺寸申请RAM内存空间。其中,RAM内存空间可以是静态的连续内存,也可以是动态的非连续内存。其中,在RAM内存空间中可以划分第一RAM内存区域和第三RAM内存区域,并对第一RAM内存区域和第三RAM内存区域进行复用,以实现基于Diff数据压缩分块和Extra数据压缩分块进行还原。
[0043] 这样,电子设备可以基于较小的RAM内存空间实现对Diff数据压缩分块或Extra数据压缩分块的还原操作。而且,由于第一RAM内存区域和第三RAM内存区域均后接续安全缓冲区,或第一RAM内存区域和第三RAM内存区域中内置安全缓冲区,则即使Diff数据压缩分块或Extra数据压缩分块超过分块尺寸一些,也不会影响数据处理的准确性。
[0044] 根据第二方面,或者以上第一方面的任意一种实现方式,差分文件的数据结构包括尾部,尾部中包括校验字段,校验字段的值为目标文件的哈希值;
[0045] 电子设备将目标文件作为与已有文件对应的升级文件,可以包括:在处理完成所有的Diff数据压缩分块和Extra数据压缩分块时,电子设备计算目标文件的哈希值;如果目标文件的哈希值与校验字段的值匹配,则电子设备将目标文件作为与已有文件对应的升级文件。
[0046] 这样,电子设备对差分文件进行还原时,可以基于目标文件的哈希值对差分文件还原的准确性进行校验。
[0047] 根据第二方面,或者以上第一方面的任意一种实现方式,差分文件的头部中包括数据压缩块尺寸字段,数据压缩块尺寸字段的值用于指示差分文件中各个数据压缩块的尺寸最大值。该方法还包括:电子设备每解析得到一个Diff数据压缩分块时,如果Diff数据压缩分块的尺寸大于数据压缩块尺寸字段的值,则停止对差分文件的数据还原处理;电子设备每解析得到一个Extra数据压缩分块时,如果Extra数据压缩分块的尺寸大于数据压缩块尺寸字段的值,则停止对差分文件的数据还原处理。
[0048] 这样,电子设备对差分文件进行还原时,可以基于数据压缩块尺寸字段对差分文件中解析得到的Diff数据压缩分块和Extra数据压缩分块的准确性进行校验。
[0049] 根据第二方面,或者以上第一方面的任意一种实现方式,差分文件的头部中包括数据总长度字段,数据总长度字段的值用于指示目标文件中的数据总长度;电子设备将目标文件作为与已有文件对应的升级文件,可以包括:在处理完成所有的Diff数据压缩分块和Extra数据压缩分块时,电子设备计算目标文件的数据总长度;如果目标文件的数据总长度与数据总长度字段的值匹配,则电子设备将目标文件作为与已有文件对应的升级文件。
[0050] 这样,电子设备对差分文件进行还原时,可以基于目标文件中的数据总长度对对差分文件还原的准确性进行校验。
[0051] 根据第二方面,或者以上第一方面的任意一种实现方式,电子设备为轻量级设备,且电子设备的RAM内存空间小于第一预设阈值,或者,电子设备可用于进行差分文件还原的RAM内存空间小于第二预设阈值。
[0052] 这样,本实施例提供的差分文件的还原方法不仅适用于RAM内存空间较小的轻量级电子设备,还适用于可用于进行差分文件还原的RAM内存空间较小的其他电子设备。
[0053] 第三方面,本申请实施例提供一种服务器。该服务器包括:一个或多个处理器;存储器;以及一个或多个计算机程序,其中一个或多个计算机程序存储在存储器上,当计算机程序被一个或多个处理器执行时,使得服务器执行如第一方面以及第一方面的任意一种实现方式中的差分文件的生成方法。
[0054] 第三方面以及第三方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第三方面以及第三方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
[0055] 第四方面,本申请实施例提供一种电子设备。该电子设备包括:一个或多个处理器;存储器;以及一个或多个计算机程序,其中一个或多个计算机程序存储在存储器上,当计算机程序被一个或多个处理器执行时,使得电子设备执行如第二方面以及第二方面的任意一种实现方式中的差分文件的还原方法。
[0056] 第四方面以及第四方面的任意一种实现方式分别与第二方面以及第二方面的任意一种实现方式相对应。第四方面以及第四方面的任意一种实现方式所对应的技术效果可参见上述第二方面以及第二方面的任意一种实现方式所对应的技术效果,此处不再赘述。
[0057] 第五方面,本申请实施例提供一种计算机可读存储介质。该计算机可读存储介质包括计算机程序,当计算机程序在电子设备上运行时,使得电子设备执行如第一方面以及第一方面的任意一种实现方式中的差分文件的生成方法,或者执行如第二方面以及第二方面的任意一种实现方式中的差分文件的还原方法。
[0058] 第五方面以及第五方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应,或者分别与第二方面以及第二方面的任意一种实现方式相对应。第五方面以及第五方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,或者可可参见上述第二方面以及第二方面的任意一种实现方式所对应的技术效果,此处不再赘述。
[0059] 第六方面,本申请实施例提供一种计算机程序产品,包括计算机程序,当计算机程序被运行时,使得计算机执行如第一方面以及第一方面的任意一种实现方式中的差分文件的生成方法,或者执行如第二方面以及第二方面的任意一种实现方式中的差分文件的还原方法。
[0060] 第六方面以及第六方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应,或者分别与第二方面以及第二方面的任意一种实现方式相对应。第六方面以及第六方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,或者可可参见上述第二方面以及第二方面的任意一种实现方式所对应的技术效果,此处不再赘述。
[0061] 第七方面,本申请提供了一种芯片,该芯片包括处理电路、收发管脚。其中,该收发管脚和该处理电路通过内部连接通路互相通信,该处理电路执行如第一方面以及第一方面的任意一种实现方式中的差分文件的生成方法,或者执行如第二方面以及第二方面的任意一种实现方式中的差分文件的还原方法,以控制接收管脚接收信号,以控制发送管脚发送信号。
[0062] 第七方面以及第七方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应,或者分别与第二方面以及第二方面的任意一种实现方式相对应。第七方面以及第七方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,或者可可参见上述第二方面以及第二方面的任意一种实现方式所对应的技术效果,此处不再赘述。

附图说明

[0063] 图1为示例性示出的一种应用场景示意图;
[0064] 图2为示例性示出的一种对固件文件进行差分还原的流程示意图;
[0065] 图3为示例性示出的差分原理示意图;
[0066] 图4为示例性示出的一种差分文件的数据结构示意图;
[0067] 图5为示例性示出的还原原理示意图;
[0068] 图6为示例性示出的数据还原操作示意图;
[0069] 图7为本实施例提供的一种差分文件的生成方法示意图;
[0070] 图8为本实施例提供的一种差分文件的数据结构示例图;
[0071] 图9为本实施例提供的一种差分文件的生成方法示意图;
[0072] 图10为本实施例提供的一种差分文件的数据结构示例图;
[0073] 图11a为本实施例提供的一种差分文件的生成方法示意图;
[0074] 图11b为本实施例提供的一种数据分块划分方法示意图;
[0075] 图12为本实施例提供的一种差分文件的还原方法示意图;
[0076] 图13为本实施例提供的一种差分文件的还原操作示意图;
[0077] 图14为本实施例提供的在基于Diff数据压缩分块进行数据还原时RAM空间占用的示意图;
[0078] 图15为本实施例提供的在基于Extra数据压缩分块进行数据还原时RAM空间占用的示意图;
[0079] 图16为本实施例提供的在基于Diff数据压缩分块进行数据还原时RAM空间占用的示意图;
[0080] 图17为本实施例提供的在基于Extra数据压缩分块进行数据还原时RAM空间占用的示意图;
[0081] 图18为本实施例提供的在基于Diff数据压缩分块进行数据还原时RAM空间占用的示意图;
[0082] 图19为本实施例提供的在基于Extra数据压缩分块进行数据还原时RAM空间占用的示意图;
[0083] 图20为示例性示出的一种应用场景示意图;
[0084] 图21为示例性示出的电子设备的硬件结构示意图;
[0085] 图22为示例性示出的电子设备的软件结构示意图;
[0086] 图23为示例性示出的一种装置的结构示意图。

具体实施方式

[0087] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0088] 本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。
[0089] 本申请实施例的说明书和权利要求书中的术语“第一”和“第二”等是用于区别不同的对象,而不是用于描述对象的特定顺序。例如,第一目标对象和第二目标对象等是用于区别不同的目标对象,而不是用于描述目标对象的特定顺序。
[0090] 在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
[0091] 在本申请实施例的描述中,除非另有说明,“多个”的含义是指两个或两个以上。例如,多个处理单元是指两个或两个以上的处理单元;多个系统是指两个或两个以上的系统。
[0092] 在终端设备进行在线固件升级时,若采用OTA差分包升级方式进行固件升级,则终端设备需要具备对差分文件进行还原的能力,也即根据差分文件和与该差分文件对应的已有固件文件(也即旧版本的固件文件,下述简称为旧固件文件),生成对应的新版本的固件文件(下述简称为新固件文件)。进而,终端设备可以根据新版本的固件文件完成固件升级。
[0093] 图1示例性的示出一种应用场景,以智能手表100为例进行在线固件升级为例进行解释说明。其中,智能手表100为不具备独立联网功能的低端智能终端设备(也可以成为轻量级嵌入式设备),智能手表100可以通过蓝牙与智能手机200进行通信。参照图1,在智能手机200中安装有与智能手表100对应的应用APP,该应用APP用于连接智能手表100与智能手机200,为智能手表100下载应用或文件等。进而,智能手表100可以通过该应用APP与OTA服务器300进行通信。示例性的,智能手表100可以定期通过该应用APP向OTA服务器300查询是否存在与智能手表100对应的升级差分包。如果查询到存在与智能手表100对应的升级差分包,则可以在满足在线升级条件(例如电量状态、联网状态、蓝牙状态等满足预设条件)时,通过该应用APP向OTA服务器300发送升级差分包下载请求,以通过智能手机200下载相应的升级差分包。其中,智能手机可以通过蓝牙技术将下载得到的升级差分包发送至智能手表100中。进而,智能手表100可以对升级差分包进行还原,并基于还原后得到新版本的固件文件完成固件升级。
[0094] 继续参照图1,与智能手表100对应的升级差分包可以基于差分数据包制作平台400制作而成,并被上传至OTA服务器300。在一些实现方式中,升级差分包也可以是在OTA服务器300中制作生成的,本实施例对此不做限定。无论升级差分包是基于差分数据包制作平台400制作而成,还是基于OTA服务器300制作而成,升级差分包均是基于新旧固件文件以及相应的差分算法而生成的。
[0095] 其中,在如图1所示的应用场景中,智能手机200为具备独立联网功能的智能终端设备,作为智能手表100与OTA服务器300的中继设备。
[0096] 在一些实现方式中,若智能手表100具备独立联网能力,也可以直接与OTA服务器300通信,以向OTA服务器30查询是否到存在与智能手表100对应的升级差分包,或者以向OTA服务器300下载相应的升级差分包。
[0097] 在图1所示的应用场景中,以智能手表100为例对存在固件在线升级需求的终端设备进行解释。其中,存在固件在线升级需求的终端设备也可以是智能手环,智能耳机等其他穿戴式设备,也可以是万物互联场景中的任意嵌入式节点设备(例如为采集温度、湿度等信息的节点设备),本实施例对比不做限定。如果存在固件在线升级需求的终端设备为不具备独立联网功能的低端设备,则需要通过中继设备与OTA服务器进行通信,以通过中继设备下载升级差分包。如果存在固件在线升级需求的终端设备为具备独立联网功能的低端设备,则可以直接与OTA服务器进行通信以下载升级差分包。
[0098] 图2示例性的示出了固件文件差分还原的流程示意图。
[0099] 如图2所示,在服务器侧(或工具侧),服务器根据预设的差分算法(例如BSDiff算法)对成对的新固件文件和旧固件文件进行差分处理,得到一个差分文件(Patch文件)。这样,服务器可以得到与固件升级对应的多个差分文件。差分文件的数量与待升级的固件有关,本实施例对此不做限定。进而,服务器可以对这多个差分文件进行压缩打包,生成升级差分包。其中,升级差分包中可以包括多个压缩后的差分文件,以及与这多个差分文件对应的描述文件等。
[0100] 当终端需要进行固件升级时,向服务器请求下载升级差分包。终端接收到升级差分包后,对升级差分包进行解压,可以得到各个差分文件。以一个差分文件为例,终端根据与该差分文件匹配的旧固件文件,对该差分文件进行还原操作,即可得到相应的新固件文件。这样,终端侧可以得到多个新固件文件,进而可以基于这多个新固件文件进行固件升级操作。
[0101] 继续参照图2,在固件文件差分还原的流程中,文件差分操作以及差分包压缩操作是在服务器侧执行的,差分包解压操作以及差分文件还原操作时在终端侧执行的。
[0102] 当终端为轻量级嵌入式设备(如穿戴式设备)时,其RAM资源受限,会严重影响差分包解压还原处理的效率,甚至可能会由于差分文件过大而导致固件升级失败的问题。因此,如果差分文件还原过程涉及的内存消耗能够更小,则会更好地适用于轻量级嵌入式设备的固件升级场景。
[0103] 下述以BSDiff算法为例,对差分还原算法的基本原理进行解释说明。
[0104] (一)差分原理(Bsdiff原理)
[0105] 其中,差分原理的核心思想为尽可能多的利用旧文件中的数据,尽可能少的加入新的数据来构建新文件。
[0106] 图3示例性的示出了基于Bsdiff原理的文件差分流程。
[0107] 参照图3,对比旧文件数据和新文件数据,在二者中确定各个最长的相似子串(即子字符串)。示例性的,新文件数据中的数据01_new为“1010101010101010101”,旧文件数据中的数据01_old为“1010101110101011101”,新文件数据中的数据01_new和旧文件数据中的数据01_old为一个最长的相似子串。又示例性的,新文件数据中的数据03_new和旧文件数据中的数据02_old为另一个最长的相似子串。示例性的,在新文件数据中,介于数据01_new和数据03_new之间为数据02_new,在旧文件数据中没有与数据02_new相似的子串,则数据02_new为在新文件中新增的数据。类似的,在新文件数据中,数据04_new也为新增的数据。
[0108] 由此,可以根据新文件数据和旧文件数据中的相似子串,计算差异数据(Diff数据),差异数据与新增数据(Extra数据)共同构成增量更新数据(Patch数据)。如图3所示,将新文件中的数据01_new和旧文件中的数据01_old进行减运算,可以得到Patch数据中的Diff数据01;将新文件中的数据03_new和旧文件中的数据02_old进行减运算,可以得到Patch数据中的Diff数据02。同时,可以将新文件中的数据02_new直接作为Patch数据中的Extra01数据,将新文件中的数据04_new直接作为Patch数据中的Extra02数据。以此类推,即可基于新文件数据和旧文件数据得到所有Diff数据和Extra数据,组成Patch数据。
[0109] 需要指出是,通常情况下,在依据BSDiff算法得到的Patch数据中,Diff数据和Extra数据是成对出现的,在每一块Diff数据后均为一块Extra数据。可以理解为,该Patch数据中包括至少一组增量更新数据,每组增量更新数据通常都包括Diff数据和Extra数据。在一些特殊情况下,Diff数据和Extra数据也可能不是成对出现的,例如在Patch数据中最后一组增量更新数据中,可能只包括Diff数据,可能只包括Extra数据。
[0110] 需要注意的是,Patch数据中各Diff数据和Extra数据排序及位置偏移与新文件数据是一致的。由此,按顺序对Patch数据中的Diff数据和Extra数据进行数据还原处理,即可得到与Patch数据对应的新文件数据。
[0111] 需要注意的是,在依据BSDiff算法得到的Patch数据中,
[0112] 在基于新文件数据和旧文件数据得到Patch数据之后,即可对Patch数据进行数据编码,得到相应的Patch文件。
[0113] 在图3中示例性的示出了一种Patch文件的数据结构,该数据结构包括总编码头,与一组Diff数据和Extra数据对应的编码信息,以及Diff数据和Extra数据。其中,与某一组Diff数据和Extra数据对应的编码信息,用于对该组Diff数据和Extra数据进行描述,例如描述Diff数据的字节长度、Extra数据的字节长度,以及在旧文件中读取数据的指针偏移量。
[0114] 图4示例性的示出了一种Patch文件的数据结构。如图4所示,该Patch文件的数据结构包括头部(Header)、控制块(control block)、Diff块(差异数据块)和Extra块(新增数据块)。
[0115] 其中,Header包括8个字节,用于填充魔数。在此处,魔数用于判断文件类型。
[0116] 每个control block包括24个字节,用于描述一组Diff块和Extra块。也即,control block中记录的数据可以作为其描述的一组Diff块和Extra块的编码信息。其中,control block的前8个字节用于填充其描述的Diff块的字节长度;control block的中间8个字节用于填充其描述的Extra块的字节长度;control block的后8个字节用于填充指针偏移量,该指针偏移量用于确定在旧文件中读取数据(用于与Diff数据进行加运算的数据)的位置。
[0117] 示例性的,每个control block可以使用(x,y,z)来表示,其中,x为Diff块的字节长度,用于指示从旧文件和Diff块中读取x个字节以进行加运算;y为Extra块的字节长度,用于指示从Extra块中读取y个字节以添加至新文件中;z为旧文件指针的偏移量,用于确定从旧文件中下一次读取数据的指针位置,也即用于确定本次在旧文件中读取数据后指针的偏移量。其中,当z表示的偏移量以指针当前位置为基准时,z可以通过正负值来表示偏移的方向,例如正值表示向前偏移,负值表示向后偏移。
[0118] Diff块,用于记录Diff数据,也即用于记录旧文件与新文件中一个最长的相似子串的差值。
[0119] Extra块,用于记录Extra数据,也即用于记录新文件中的新增数据。
[0120] 其中,在将多个Patch文件进行打包之前,还可以对Patch文件进行压缩。
[0121] 在一种可能的实现方式中,针对数据结构如图4所示的Patch文件进行压缩时,可以采用按数据块进行压缩的方式,也即分别对每个control block(即control block1或control block2或control block n)、每个Diff块(即Diff块1或Diff块2或Diff块n)和每个Extra块(即Extra块1或Extra块2或Extra块n)进行压缩。
[0122] 在一种可能的实现方式中,针对数据结构如图4所示的Patch文件进行压缩时,可以采用对整个文件进行压缩的方式,也即将Header、control block1、Diff块1、Extra块1、control block2、Diff块2、Extra块2、…、control block n、Diff块n、Extra块n一起进行压缩。
[0123] 在一种可能的实现方式中,针对数据结构如图4所示的Patch文件进行压缩时,可以采用将整个文件按预设大小划分为x个子文件后再进行压缩的方式,假设整个文件大小为N,则每个子文件的大小为N/x。
[0124] 在一种可能的实现方式中,针对数据结构如图4所示的Patch文件进行压缩时,可以采用数据块类型进行压缩的方式,也即分别对多个control block(即control block1、control block2、…、control block n)、多个Diff块(即Diff块1、Diff块2、…、Diff块n)和多个Extra块(即Extra块1、Extra块2、…、Extra块n)进行压缩。
[0125] 这样,在服务器分别对各组新固件文件和旧固件文件进行差分处理,得到多个Patch文件之后,将这多个Patch文件分别压缩后进行打包即可得到相应的升级差分包,以待终端查询并下载该升级差分包。
[0126] (二)还原原理(bspatch原理)
[0127] 对应于上述bsdiff原理,在BSDiff算法中基于bspatch原理进行Patch文件还原。其中,bspatch原理可以理解为bsdiff原理的逆过程,也即Patch文件还原可以理解为Patch文件生成逆过程。
[0128] 图5示例性的示出了基于bspatch原理的文件还原流程。
[0129] 参照图5,对Patch文件进行数据解码,得到对应的Patch数据。此处对Patch文件数据进行解码的过程可以理解为对Patch数据进行数据编码的逆过程。
[0130] 其中,关于Patch文件的数据结构可以参照上文关于图4的解释说明,在此不再赘述。由此,在对Patch文件进行数据解码得到的Patch数据中,Diff数据和Extra数据是成对出现的,在每一块Diff数据后均为一块Extra数据。而且,Patch数据中各对Diff数据和Extra数据的排序与新文件数据是一致的。
[0131] 当终端获取到Patch文件时,对Patch文件的header进行解析,根据header中记录的魔数获知文件类型之后,即可根据与该文件类型对应的数据结构进行数据解码操作。其中,终端每解码到一块Diff数据或Extra数据之后,就根据这块Diff数据或Extra数据进行文件还原。
[0132] 参照图4,在Patch文件中,每个control block用于描述一对Diff块和Extra块。由此,终端可以根据control block中记录的内容,获取相应的Diff数据以及Extra数据,并基于获取到的Diff数据和Extra数据进行还原处理得到新文件中的数据。
[0133] 以Patch数据中的Diff01数据和Extra01数据为例,在进行新文件数据还原时:读取Diff01数据,以及在旧文件中读取与Diff01数据匹配的数据01_old数据,并对Diff01数据和数据01_old数据进行加运算,即可得到数据01_new写入新文件中;读取Extra01数据,作为数据02_new直接写入新文件中。类似的,继续读取Diff02数据,以及在旧文件中读取与Diff02数据匹配的数据02_old数据,并对Diff02数据和数据02_old数据进行加运算,即可得到数据03_new写入新文件中;读取Extra02数据,作为数据04_new直接写入新文件中。以此类推,终端即可基于Patch文件中的Patch数据,以及旧文件中的相关数据得到新文件中的所有数据。
[0134] 下述以每个control block使用(x,y,z)表示为例,结合图6对基于Patch文件进行还原的流程进行解释说明。
[0135] 如图6所示,在Patch文件中,control block1中填充的内容为(x1,y1,z1),用于描述Diff块1和Extra块1。其中,Diff块1的字节长度为x1,Extra块1的字节长度为x2。
[0136] 终端在Patch文件中解析到control block1中填充的(x1,y1,z1)。首先,终端在Patch文件中继续读取x1长度的Diff数据,以及在旧文件中读取x1长度的数据,并将这两段x1长度的数据进行加运算,得到x1长度的新文件数据,写入新文件(或者称为目标文件)中。然后,终端在Patch文件中继续读取y1长度的Extra数据,作为y1长度的新文件数据直接写入新文件中。
[0137] 示例性的,在如图4所示的文件数据结构中,在头部之后以及控制块1之前,还可以包括control block0,在control block0中填充的是(0,0,z0)。其中,control block0中填充z0,用于在旧文件中确定用于读取x1长度数据的指针偏移量。由于旧文件指针当前位置为旧文件起始位置,则将旧文件指针由旧文件起始位置偏移z0后,即可在旧文件中读取到与x1长度的Diff数据匹配的x1长度的旧文件数据。
[0138] 类似的,终端继续解析Patch文件,读取control block2中填充的(x2,y2,z2)。首先,终端在Patch文件中继续读取x2长度的Diff数据,以及在旧文件中读取x2长度的数据,并将这两段x2长度的数据进行加运算,得到x2长度的新文件数据,写入新文件中。其中,将旧文件的指针在当前位置的基础上再偏移z1后,即可在旧文件中读取到与x2长度的Diff数据对应的x2长度的旧文件数据。然后,终端在Patch文件中继续读取y2长度的Extra数据,作为y2长度的新文件数据直接写入新文件中。
[0139] 以此类推,终端即可根据Patch文件和旧文件得到一个新文件,完成一个新文件的还原流程。
[0140] 这样,终端可以基于升级差分包中的各个Patch文件以及相应的旧文件,实现对各个新文件的还原。
[0141] 然而,在依据BSDiff算法得到的Patch文件,由于Diff块是基于新文件和旧文件的最长相似子串确定的,Extra块是基于新文件中的新增数据确定的,所以Diff块和Extra块的字节长度是不固定的且无限制的,其字节长度与新旧文件的差异情况有关,可以为几十KB,也可以高达几百甚至上千上万KB。
[0142] 终端对Patch文件进行还原处理时,其所需的RAM内存空间大小与Diff块或Extra块的字节长度直接相关。Diff块或Extra块的字节长度越大,则终端对其处理时所需的RAM内存空间就越大。例如,Diff块的字节长度为200KB,则终端至少要分配200KB以上的RAM内存空间以对其进行处理。当终端的RAM内存空间有限时,终端无法或很难满足处理该Diff块或Extra块的需求。由此,基于BSDiff算法得到的Patch文件的数据结构,对轻量级嵌入式设备的固件差分包升级场景极其不友好。
[0143] 为了解决上述技术问题,以使差分文件还原过程涉及的终端RAM内存消耗能够更小,本实施例提供了一种差分文件的生成方法,该差分文件的生成方法应用于服务器侧。其中,此处提及的服务器可以理解为用于生成差分文件的任意电子设备。
[0144] 图7示例性的示出了本实施例提供的基于Bsdiff原理的文件差分流程。
[0145] 同前所述,对比旧文件数据和新文件数据,在二者中确定各个最长的相似子串(即子字符串)。示例性的,新文件数据中的数据01_new为“1010101010101010101”,旧文件数据中的数据01_old为“1010101110101011101”,新文件数据中的数据01_new和旧文件数据中的数据01_old为一个最长的相似子串。又示例性的,新文件数据中的数据03_new和旧文件数据中的数据02_old为另一个最长的相似子串。示例性的,在新文件数据中,介于数据01_new和数据03_new之间为数据02_new,在旧文件数据中没有与数据02_new相似的子串,则数据02_new为在新文件中新增的数据。类似的,在新文件数据中,数据04_new也为新增的数据。
[0146] 由此,可以根据新文件数据和旧文件数据中的相似子串,计算差异数据(Diff数据),差异数据与新增数据(Extra数据)共同构成增量更新数据(Patch数据)。如图3所示,将新文件中的数据01_new和旧文件中的数据01_old进行减运算,可以得到Patch数据中的Diff数据01;将新文件中的数据03_new和旧文件中的数据02_old进行减运算,可以得到Patch数据中的Diff数据02。同时,可以将新文件中的数据02_new直接作为Patch数据中的Extra01数据,将新文件中的数据04_new直接作为Patch数据中的Extra02数据。以此类推,即可基于新文件数据和旧文件数据得到所有Diff数据和Extra数据,组成Patch数据。
[0147] 需要指出是,在依据BSDiff算法得到的Patch数据中,Diff数据和Extra数据是成对出现的,在每一块Diff数据后均为一块Extra数据。而且,Patch数据中各对Diff数据和Extra数据的位置偏移与新文件数据是一致的。
[0148] 在得到Patch数据之后,服务器侧对Patch数据中的各Diff数据以及Extra数据按照分块尺寸(zonesize)对Diff数据以及Extra数据进行数据分块。每个Diff数据分块和Extra数据分块为终端对差分文件进行还原时的最小独立处理数据单元。
[0149] 其中,zonesize可以根据终端侧RAM内存空间确定,具体可以根据终端侧可用于进行差分文件还原的连续的RAM内存空间的大小确定。zonesize也可以理解为终端在进行Diff数据还原处理时RAM内存空间所支持的最大处理字节数。
[0150] 继续参照图7,针对Patch数据中的Diff数据01,按照zonesize将其划分为n1个Diff数据分块。在这n1个Diff数据分块中,前(n1‑1)个Diff数据分块的数据尺寸(或称字节长度)为zonesize,最后一个Diff数据分块的数据尺寸小于等于zonesize。其中,这n1个Diff数据分块的数据排序与Diff数据01是相同的。类似的,针对Patch数据中的Extra数据01,也按照zonesize将其划分为n2个Extra数据分块。在这n1个Extra数据分块中,前(n2‑1)个Extra数据分块的数据尺寸为zonesize,最后一个Extra数据分块的数据尺寸小于等于zonesize。其中,这n2个Extra数据分块的数据排序与Extra数据01也是相同的。
[0151] 示例性的,在终端设备RAM内存区域不复用的情况下,针对终端设备用于进行差分文件还原的连续的RAM内存空间,可以将该RAM内存空间划分为第一RAM内存区域、第二RAM内存区域、第三RAM内存区域和第四RAM内存区域,其中,第一RAM内存区域、第二RAM内存区域和第三RAM内存区域共同用于Diff数据分块还原处理涉及的数据存储操作,以及用于Extra数据分块还原处理涉及的数据存储操作,第四RAM内存区域用于数据解压操作。
[0152] 假设,终端设备RAM内存空间为M,数据压缩算法进行数据解压操作所需的内存空间为N1(也即第四RAM内存区域的内存空间为N1),则第一RAM内存区域、第二RAM内存区域和第三RAM内存区域可以均分剩余空间,也即第一RAM内存区域、第二RAM内存区域和第三RAM内存区域的内存空间均为(M‑N1)/3。此时,可以将zonesize设置为(M‑N1)/3。例如,当M为200KB,N1为20KB时,RAM内存空间的划分情况为:第一RAM内存区域60KB、第二RAM内存区域
60KB、第三RAM内存区域60KB、第四RAM内存区域20KB。此时,zonesize=60KB,表示终端设备可以每次对60KB的Diff数据或Extra数据进行数据还原处理。
[0153] 又示例性的,在终端设备RAM内存区域复用的情况下,可以将RAM内存顺序划分为第一RAM内存区域、第二RAM内存区域、第三RAM内存区域、第四RAM内存区域和第五RAM内存区域,其中,第一RAM内存区域和第三RAM内存区域共同用于Diff数据分块还原处理涉及的数据存储操作,以及用于Extra数据分块还原处理涉及的数据存储操作,第五RAM内存区域用于数据解压操作。第二RAM内存区域位于为第一RAM内存区域和第三RAM内存区域之间,为第一RAM内存区域的安全缓冲区域;第四RAM内存区域位于为第三RAM内存区域和第五RAM内存区域之间,为第三RAM内存区域的安全缓冲区域。
[0154] 假设,终端设备RAM内存空间为M,数据压缩算法进行数据解压操作所需的内存空间为N1(也即第五RAM内存区域的内存空间为N1),安全缓冲区域所需的内存空间为N2,则第一RAM内存区域和第三RAM内存区域可以均分剩余空间,也即第一RAM内存区域和第三RAM内存区域的内存空间均为(M‑N1‑N2*2)/2。此时,可以将zonesize设置为(M‑N1‑N2*2)/2。例如,当M为200KB,N1为16KB,N2为2KB时,RAM内存空间的划分情况为:第一RAM内存区域90KB、第二RAM内存区域2KB、第三RAM内存区域90KB、第四RAM内存区域2KB、第五RAM内存区域16KB。此时,zonesize=90KB,表示终端设备可以每次对90KB的Diff数据或Extra数据进行数据还原处理。
[0155] 其中,在一些特殊情况下,数据压缩后的数据尺寸要大于数据压缩前的数据尺寸,由于Diff数据分块或Extra数据分块在压缩前的数据尺寸与第一RAM内存区域和第三RAM内存区域的大小相同,一旦Diff数据压缩分块或Extra数据压缩分块的尺寸变大,则会在第一RAM内存区域或第三RAM内存区域中溢出而影响正常的数据还原处理。由此,设置安全缓冲区域可以有效避免由于Diff数据压缩分块或Extra数据压缩分块尺寸增大溢出RAM内存区域而导致的数据还原异常的问题。
[0156] 再示例性的,在终端设备RAM内存区域复用的情况下,针对终端设备用于进行差分文件还原的连续的RAM内存空间,可以将该RAM内存空间划分为第一RAM内存区域、第三RAM内存区域和第五RAM内存区域,其中,第一RAM内存区域和第三RAM内存区域共同用于Diff数据分块还原处理涉及的数据存储操作,以及用于Extra数据分块还原处理涉及的数据存储操作,第五RAM内存区域用于数据解压操作。
[0157] 假设,终端设备RAM内存空间为M,数据压缩算法进行数据解压操作所需的内存空间为N1(也即第三RAM内存区域的内存空间为N1),则第一RAM内存区域和第二RAM内存区域可以均分剩余空间,也即第一RAM内存区域和第二RAM内存区域的内存空间均为(M‑N1)/2。此时,可以将zonesize设置为(M‑N1)/2。例如,当M为20KB,N1为16KB时,RAM内存空间的划分情况为:第一RAM内存区域2KB、第二RAM内存区域2KB、第三RAM内存区域16KB。此时,zonesize=2KB,表示终端设备可以每次对2KB的Diff数据或Extra数据进行数据还原处理。
[0158] 在一些极端情况下,如果终端设备可用于进行差分文件还原的连续的RAM内存空间特别小,如20KB等,也可以不设置安全缓冲区域。
[0159] 关于如何基于终端申请到的RAM内存空间的各个区域进行数据还原的操作,将在后续描述的Patch文件的还原流程中进行详细解释说明,在此不再赘述。
[0160] 在对Patch数据中的各Diff数据以及Extra数据进行数据分块划分并压缩后,即可对分块划分及压缩后的Patch数据进行数据编码,得到相应的Patch文件。
[0161] 在本实施例中,用于对Diff数据分块或Extra数据分块进行数据压缩的数据压缩算法,采用内存消耗低、解压速度快的数据压缩算法,例如LZMA(Lempel‑Ziv‑Markov chain‑Algorithm)、miniLZO(Lempel‑Ziv‑Oberhumer)等无损解压缩算法,以此减小终端设备进行差分文件数据还原时所占用的RAM内存空间。
[0162] 在图7中示例性的示出了一种Patch文件的数据结构,该数据结构包括总编码头,与多个Diff数据压缩分块和多个Extra数据压缩分块对应的编码信息,以及多个Diff数据压缩分块和多个Extra数据压缩分块。其中,与多个Diff数据压缩分块和多个Extra数据压缩分块对应的编码信息,用于描述多个Diff数据分块被压缩前的总字节长度、多个Extra数据分块被压缩前的总字节长度、各个Diff数据分块被压缩后的字节长度、各个Extra数据分块被压缩后的字节长度,以及在旧文件中读取与Diff数据压缩分块对应的数据的指针偏移量。
[0163] 其中,总编码头除了包括魔数,还可以包括zonesize字段,zonesize字段的值用于表示Diff数据和Extra数据被划分的分块尺寸,可以用于终端在进行数据还原时与编码信息进行结合以进行数据寻址。示例性的,终端可以基于zonesize字段的值确定旧文件指针的偏移量,以在旧文件中读取与各Diff数据压缩分块分别对应的旧文件数据。又示例性的,终端可以基于zonesize字段的值,以及多个Diff数据分块被压缩前的总字节长度或多个Extra数据分块被压缩前的总字节长度,确定Diff数据分块的数量或Extra数据分块的数量。
[0164] 在另一种示例中,总编码头中不包括zonesize字段,而是在各个编码信息中分别设置zonesize字段,本实施例对此不做限定。
[0165] 在又一种示例中,在各个编码信息中设置Diff数据压缩分块的数量、Extra数据压缩分块的数量、每个Diff数据压缩分块被压缩前后的字节长度,以及每个Extra数据压缩分块被压缩前后的字节长度。
[0166] 关于Patch文件的数据结构,本实施例对Diff数据压缩分块和Extra数据压缩分块的描述信息(或称编码信息)不做限定,只要终端侧基于相应的描述信息能够实现在Patch文件以及旧文件中进行数据寻址,并基于各个Diff数据压缩分块与各个Extra数据压缩分块还原得到目标文件即可。
[0167] 图8示例性的示出了本实施例提供的一种Patch文件的数据结构。如图8所示,该Patch文件的数据结构包括头部(Header)、控制块(zone)、Diff数据和Extra数据。
[0168] 其中,Header包括16个字节,用于填充魔数和zonesize。
[0169] 每个zone包括24个字节,用于描述多个Diff数据压缩分块和多个Extra数据压缩分块。其中,多个Diff数据压缩分块和多个Extra数据压缩分块,对应于基于BSDiff算法得到的Patch数据中的一对Diff数据和Extra数据。zone中记录的数据,可以作为其描述的多个Diff数据压缩分块和多个Extra数据压缩分块的编码信息。其中,zone的前8个字节可以记录多个Diff数据压缩分块被压缩前对应的Diff数据的总字节长度,以及各个Diff数据压缩分块描述信息(如压缩后的字节长度);zone的中间8个字节可以记录多个Extra数据压缩分块被压缩前对应的Extra数据的总字节长度,以及各个Extra数据压缩分块描述信息(如压缩后的字节长度);zone的后8个字节用于填充指针偏移量,该指针偏移量用于确定在旧文件中读取数据(即用于与Diff数据分块进行加运算的数据)的位置。
[0170] 在一种可选的实施方式中,zone的后8个字节用于填充指针偏移量可以是基于指针当前位置确定的偏移量,并通过偏移量的正负来标识偏移方向。
[0171] 在另一种可选的实施方式中,zone的后8个字节用于填充指针偏移量可以是基于文件起始位置确定的偏移量。
[0172] Diff数据中包括一个或多Diff数据压缩分块,每个Diff数据压缩分块用于记录Diff数据分块被压缩后的数据。
[0173] Extra数据中包括一个或多个Extra数据数据压缩分块,每个Extra数据压缩分块用于记录Extra数据分块被压缩后的数据。
[0174] 这样,在Patch文件中,每个Diff数据压缩分块或Extra数据压缩分块均可以作为终端进行数据还原时一个可独立处理的数据单元,以此降低终端进行数据还原时的RAM内存消耗。
[0175] 在一种可选的实施方式中,当基于Patch数据生成Patch文件时,还可以将每个Diff数据分块以及Extra数据分块分别进行压缩,并对各个数据压缩块添加分块编码信息。其中,分块编码信息可以作为数据压缩分块的块头部,相应的Diff压缩数据或Extra压缩数据作为数据压缩分块的块数据。
[0176] 以Patch数据中的Diff数据01和Extra数据01为例,图9示例性的示出了一种Patch文件的数据结构。如图9所示,针对Patch数据中的Diff数据01,按照zonesize将其划分为n1个Diff数据分块,并分别对每个Diff数据分块进行压缩,得到相应的Diff数据压缩分块。在Patch文件中,每个Diff数据压缩分块之前填充用于描述该Diff数据压缩分块的编码信息。示例性的,Diff数据压缩分块的编码信息可以包括但不限于Diff数据分块压缩前的数据尺寸(csize)和压缩后的数据尺寸(usize)。
[0177] 类似的,继续参照图9,针对Patch数据中的Extra数据01,按照zonesize将其划分为n2个Extra数据分块,并分别对每个Extra数据分块进行压缩,得到相应的Extra数据压缩分块。在Patch文件中,每个Extra数据压缩分块之前填充用于描述该Extra数据压缩分块的编码信息。示例性的,Extra数据压缩分块的编码信息可以包括但不限于Extra数据分块压缩前的数据尺寸(csize)和压缩后的数据尺寸(usize)。
[0178] 关于Patch数据中的其他Diff数据和Extra数据也是如此,在此不再赘述。由此,针对每个Diff数据压缩分块和每个Extra数据压缩分块,终端解析到相应的分块编码信息后,均可以将其作为一个可独立处理的数据单元,以执行数据还原操作。关于如何以Diff数据压缩分块或Extra数据压缩分块为一个数据处理单元进行目标文件还原的操作,将在后续描述的Patch文件的还原流程中进行详细解释说明,在此不再赘述。
[0179] 需要指出的是,参照图9,编码信息01用于描述的是Diff数据01和Extra数据01,也即描述的是Diff数据压缩分块1‑n1压缩前的总数据尺寸,Extra数据压缩分块1‑n2压缩前的总数据尺寸,以及用于在旧文件中读取与Diff数据02对应的旧文件数据的指针偏移量。
[0180] 图10示例性的示出了本实施例提供的一种Patch文件的数据结构。如图10所示,该Patch文件的数据结构包括头部(Header)、控制块(zone)、Diff数据和Extra数据。
[0181] 其中,Header包括16个字节,用于填充魔数和zonesize。
[0182] 每个zone包括24个字节,用于描述多个Diff分块压缩数据和多个Extra分块压缩数据。其中,多个Diff分块压缩数据被分块压缩前的Diff数据,以及多个Extra分块压缩数据被分块压缩前的Extra数据,对应于Patch数据中的一对Diff数据和Extra数据。zone中记录的数据,可以作为其描述的多个Diff分块压缩数据和多个Extra分块压缩数据的编码信息。其中,zone的前8个字节可以记录多个Diff分块压缩数据被分块压缩前的Diff数据的总字节长度;zone的中间8个字节可以记录多个Extra压缩数据被分块压缩前的Extra数据的总字节长度;zone的后8个字节用于填充指针偏移量,该指针偏移量用于确定在旧文件中读取数据(用于与Diff数据分块进行加运算的数据)的位置。
[0183] 示例性的,每个zone可以使用(x,y,z)来表示,其中,x为其描述的多个Diff分块压缩数据被分块压缩前的Diff数据的总字节长度;y为其描述的多个Extra压缩数据被分块压缩前的Extra数据的总字节长度;z为旧文件指针的偏移量,用于确定从旧文件中读取与其所属的zone描述的首个Diff分块数据对应的旧文件数据的指针位置。其中,该指针偏移量可以是基于指针当前位置确定的偏移量,并通过偏移量的正负来标识偏移方向,也可以是基于文件起始位置确定的偏移量,本实施例对此不做限定。
[0184] 在一种可选的示例中,每个zone也可以单独被压缩,在此将压缩后的zone称之为控制压缩块。其中,控制压缩块可以包括块头部和块数据,块数据用于记录与zone内容对应的压缩数据,块头部用于记录与该控制压缩块对应的压缩描述信息,压缩描述信息可以包括zone压缩后的数据尺寸(或称控制压缩块的数据尺寸),压缩描述信息可以包括但不限于zone压缩前是数据尺寸(csize)和压缩后的数据尺寸(csize)。
[0185] Diff数据中包括一个或多个数据压缩分块,每个数据压缩分块包括块头部和块数据,其中,块数据用于记录Diff数据分块被压缩后的数据,块头部用于记录与该Diff数据分块压缩数据对应的压缩描述信息,压缩描述信息可以包括但不限于Diff数据分块压缩前的数据尺寸(csize)和压缩后的数据尺寸(usize)。其中,压缩描述信息可以只包括Diff数据分块压缩后的数据尺寸(usize),也即只包括Diff数据压缩分块的数据尺寸。
[0186] Extra数据中包括一个或多个Extra数据压缩分块,每个Extra数据压缩分块包括块头部和块数据,其中,块数据用于记录Extra数据分块被压缩后的数据,块头部用于记录与该Extra数据分块压缩数据对应的压缩描述信息,压缩描述信息可以包括但不限于Extra数据分块压缩前的数据尺寸(csize)和压缩后的数据尺寸(usize)。其中,压缩描述信息可以只包括Extra数据分块压缩后的数据尺寸(usize),也即只包括Extra数据压缩分块的数据尺寸。
[0187] 这样,在Patch文件中,每个Diff数据压缩分块或Extra数据压缩分块均可以作为终端进行数据还原时一个可独立处理的数据单元,以此降低终端进行数据还原时的RAM内存消耗。
[0188] 需要指出的是,本申请实施例提供的Patch文件仅为示例性的表达,对此不做限定。
[0189] 在一种示例中,在上述Patch文件的数据结构的基础上,Header中除了填充zonesize字段外,还可以填充数据压缩分块最大字节长度(LengthMAX)字段,该字段的值用于指示各个数据压缩分块(包括Diff数据压缩分块和Extra数据压缩分块)的最大数据尺寸。
[0190] 如果每个zone也单独被压缩,则LengthMAX字段的值用于指示各个数据压缩分块(包括控制压缩块、Diff数据压缩分块和Extra数据压缩分块)的最大数据尺寸。
[0191] 终端对Patch文件进行解析时,可以基于LengthMAX字段的值判断接收到的Patch文件是否有误。例如,假设Patch文件中某个Diff数据压缩分块或Extra数据压缩分块尺寸超过LengthMAX字段的值,终端则可以确定该Patch文件有误。
[0192] 在又一种示例中,在上述Patch文件的数据结构的基础上,Header中除了填充zonesize字段外,还可以填充目标文件数据总长度(NewfileLength)字段,该字段的值用于指示基于该Patch文件还原得到的目标文件的数据总长度。
[0193] 终端在基于Patch文件进行目标文件还原时,可以基于NewfileLength字段的值判断还原得到目标文件是否正确。例如,假设基于Patch文件进行数据还原得到的目标文件的数据长度小于或大于NewfileLength字段的值,终端则可以确定还原得到的目标文件有误。
[0194] 在另一种示例中,在上述Patch文件的数据结构的基础上,上述Patch文件的数据结构中还可以包括尾部,该尾部中可以填充校验字段,该校验字段的值用于指示基于该Patch文件还原得到的目标文件的哈希值。
[0195] 终端在基于Patch文件进行目标文件还原时,还可以基于校验字段的值判断还原得到目标文件是否正确。例如,假设基于Patch文件进行数据还原得到的目标文件的哈希值,与校验字段的值不同,终端则可以确定还原得到的目标文件有误。
[0196] 上述以生成一个Patch文件为进行解释说明,同理也可以基于其他成对的新旧固件文件生成对应的Patch文件,以此得到与差分升级包对应的各个Patch文件。进而,当终端向服务器请求下载升级差分包时,服务器可以将对这些Patch文件进行打包生成相应的差分升级包,并将差分升级包通过无线网络发送至终端。
[0197] 在本实施例提供的差分文件的生成方法中,对基于BSDiff算法得到的Patch数据重新进行数据编码,将Diff数据和Extra数据基于zonesize进行分块压缩,以使对Patch文件进行还原时最小数据处理单元的大小可控,其中,zonesize可以根据轻量级嵌入式设备的RAM内存空间灵活设置,这样能够更好地适用于轻量级嵌入式设备的固件升级场景。
[0198] 考虑到终端侧进行差分文件还原时,申请的RAM内存空间中可以包括安全缓冲区域,本实施例还提供了一种基于zonesize对Diff数据与Extra数据进行分块划分的方法。
[0199] 图11a示例性的示出了本实施例提供的基于Bsdiff原理的文件差分流程。
[0200] 其中,图11a和图7所示的文件差分流程是一致的,区别在于Diff数据分块与Extra数据分块进行划分方式。在此未尽详细解释之处,可以参见前述,不再赘述。
[0201] 参照图11a,以Patch数据中的Diff数据01为例,按照zonesize将其划分为n1个Diff数据分块。在这n1个Diff数据分块中,前(n1‑1)个Diff数据分块的数据尺寸(或称字节长度)为zonesize,最后一个Diff数据分块的数据尺寸可能会大于zonesize。其中,这n1个Diff数据分块的数据排序与Diff数据01是相同的。类似的,针对Patch数据中的Extra数据01,也按照zonesize将其划分为n2个Extra数据分块。在这n1个Extra数据分块中,前(n2‑1)个Extra数据分块的数据尺寸为zonesize,最后一个Extra数据分块的数据尺寸可能会大于zonesize。其中,这n2个Extra数据分块的数据排序与Extra数据01也是相同的。
[0202] 继续参照图11b中(1),继续以Diff数据01为例,按照zonesize将其划分为(n1+1)个Diff数据分块。在这(n1+1)个Diff数据分块中,前n1个Diff数据分块的数据尺寸为zonesize,第(n1+1)个Diff数据分块的数据尺寸远小于zonesize。示例性的,第(n1+1)个Diff数据分块的数据尺寸小于安全缓冲区域数据尺寸的预设比例。例如,第(n1+1)个Diff数据分块的数据尺寸小于安全缓冲区域数据尺寸的50%。其中,安全缓冲区域指的是终端侧进行差分文件还原时申请的RAM内存空间中划分的安全缓冲区域。
[0203] 继续参照图11b中(1),在第(n1+1)个Diff数据分块的数据尺寸小于安全缓冲区域数据尺寸的预设比例时,可以对Diff数据分块的划分情况进行调整。也即,可以将第(n1+1)个Diff数据分块用于第n1个Diff数据分块合并后,作为最终划分的第n1个Diff数据分块。此时,在这n1个Diff数据分块中,前(n1‑1)个Diff数据分块的数据尺寸为zonesize,最后一个Diff数据分块的数据尺寸大于zonesize。
[0204] 在第(n1+1)个Diff数据分块的数据尺寸不小于安全缓冲区域数据尺寸的预设比例时,不对Diff数据分块的划分情况进行调整。此时,Diff数据分块的划分情况可以参照图7,不再赘述。
[0205] 以Extra数据01为例,亦是如此。如图11b中(2)所示,按照zonesize可以将Extra数据01划分为(n2+1)个Extra数据分块。在这(n2+1)个Extra数据分块中,前n2个Extra数据分块的数据尺寸为zonesize,第(n2+1)个Extra数据分块的数据尺寸远小于zonesize。示例性的,第(n2+1)个Extra数据分块的数据尺寸小于安全缓冲区域数据尺寸的预设比例。例如,第(n2+1)个Extra数据分块的数据尺寸小于安全缓冲区域数据尺寸的50%。
[0206] 继续参照图11b中(2),在第(n2+1)个Extra数据分块的数据尺寸小于安全缓冲区域数据尺寸的预设比例时,可以对Extra数据分块的划分情况进行调整。也即,可以将第(n2+1)个Extra数据分块用于第n2个Extra数据分块合并后,作为最终划分的第n2个Extra数据分块。此时,在这n2个Extra数据分块中,前(n2‑1)个Extra数据分块的数据尺寸为zonesize,最后一个Extra数据分块的数据尺寸大于zonesize。
[0207] 在第(n2+1)个Extra数据分块的数据尺寸不小于安全缓冲区域数据尺寸的预设比例时,不对Extra数据分块的划分情况进行调整。此时,Extra数据分块的划分情况可以参照图7,不再赘述。
[0208] 可以理解的,关于任意一个Diff数据或Extra数据,将其按照zonesize划分数据分块时,最后一个数据分块的尺寸是否大于zonesize,是与Diff数据或Extra数据的长度有关的。
[0209] 此处关于差分文件的数据结构,以及生成流程等未尽详细解释之处,可以参见前文,在此不再赘述。
[0210] 当终端侧基于Patch文件进行数据还原操作时,终端可以基于zone中记录多个Diff数据压缩分块被压缩前对应的Diff数据的总字节长度,zonesize的值,以及申请的安全缓冲区的数据尺寸,计算是否存在字节长度大于zonesize的Diff数据分块,以及各Diff数据分块的字节长度。类似的,终端可以基于zone中记录多个Extra数据压缩分块被压缩前对应的Extra数据的总字节长度,zonesize的值,以及申请的安全缓冲区的数据尺寸,计算是否存在字节长度大于zonesize的Extra数据分块,以及各Extra数据分块的字节长度。
[0211] 在一种可选的实施方式中,也可以在Patch文件的头部中设置标志字段,该标志字段的值用于指示是否存在字节长度大于zonesize的数据分块(包括Diff数据分块和Extra数据分块)。
[0212] 当终端侧基于Patch文件进行数据还原操作时,通过解析Patch文件的头部中标志字段的值,即可判断出是否存在字节长度大于zonesize的数据分块(包括Diff数据分块和Extra数据分块)。
[0213] 与本实施例提供的差分文件的生成方法相对应的,本实施例还提供了一种差分文件的还原方法,该差分文件的还原方法应用于终端侧。其中,此处提及的终端可以理解需要对差分文件进行还原操作的任意电子设备,例如智能手机、智能手表、智能手环等,再例如是任意物联网节点设备。
[0214] 图12示例性的示出了本实施例提供的基于Patch文件进行目标文件还原的流程。
[0215] 参照图12,对Patch文件进行数据解码,得到对应的Patch数据。此处对Patch文件数据进行解码的过程可以理解为对Patch数据进行数据编码的逆过程。
[0216] 参照图12,Patch文件的数据结构包括总编码头,与多个Diff数据压缩分块和多个Extra数据压缩分块对应的编码信息,以及多个Diff数据压缩分块和多个Extra数据压缩分块。其中,与多个Diff数据压缩分块和多个Extra数据压缩分块对应的编码信息,用于多个Diff数据压缩分块和多个Extra数据压缩分块进行描述,以使终端可以根据编码信息进行数据寻址。其中,关于Patch文件的数据结构可以参照上文关于图8的解释说明,在此不再赘述。
[0217] 当终端获取到Patch文件时,对Patch文件的header进行解析,根据header中记录的魔数和zonesize获知文件类型及数据分块尺寸之后,即可根据该数据分块尺寸申请RAM内存空间以用于差分文件还原处理,并根据与该文件类型对应的数据结构进行数据解码操作。
[0218] 其中,终端每解压到一个Diff数据分块或Extra数据分块之后,就根据这个Diff数据分块或Extra数据分块进行目标文件还原。
[0219] 继续参照图12,在对Patch文件进行数据解码得到的Patch数据中,Diff数据和Extra数据是成对出现的,在每一块Diff数据后均为一块Extra数据。而且,Patch数据中各对Diff数据和Extra数据的排序与新文件数据是一致的。其中,每块Diff数据中包括多个解压后的Diff数据分块,每块Extra数据中包括多个解压后的Extra数据分块。其中,终端基于Patch数据进行目标文件还原时,分别基于每个Diff数据分块或Extra数据分块进行数据还原操作。
[0220] 参照图8,在Patch文件中,每个zone用于描述多个Diff数据压缩分块和多个Extra数据压缩分块。由此,终端可以根据zone中记录的内容,获取到各个Diff数据压缩分块和Extra数据压缩分块,进行解压操作,并基于解压得到的Diff数据分块和Extra数据分块进行还原处理得到新文件中的数据。
[0221] 继续参照图12,以终端基于编码信息01描述的各个Diff数据压缩分块(与Diff数据01对应)和Extra数据压缩分块(与Extra数据01)进行数据还原操作为例,进行解释说明。终端首先对Diff数据01压缩分块1进行解压,得到Diff数据01分块1,Diff数据01分块1的字节长度等于zonesize。终端在基于Diff数据01分块1进行数据还原操作时,读取Diff数据01分块1的Diff数据,以及在旧文件中读取与Diff数据01分块1匹配的旧文件数据(字节长度等于zonesize),并对Diff数据01分块1中的Diff数据和匹配的旧文件数据进行加运行,即可得到与Diff数据01分块1对应的新文件数据(字节长度等于zonesize),写入到新文件中。
类似的,终端继续对Diff数据01压缩分块2进行解压,并基于解压得到的Diff数据01分块2进行数据还原,直至还原处理完成Diff数据01压缩分块n1。其中,对Diff数据01压缩分块n1解压得到的Diff数据01分块的字节长度小于等于zonesize。
[0222] 接下来,终端继续对Extra数据01压缩分块1进行解压,得到Extra数据01分块1,Extra数据01分块1的字节长度等于zonesize。终端在基于Extra数据01分块1进行数据还原操作时,读取Extra数据01分块1的Extra数据,并将这些数据直接写入新文件中。类似的,终端继续对Extra数据01压缩分块2进行解压,并基于解压得到的Extra数据01分块2进行数据还原,直至还原处理完成Extra数据01压缩分块n2。其中,对Extra数据01压缩分块n2解压得到的Extra数据02分块的字节长度小于等于zonesize。
[0223] 至此,终端完成基于Diff数据01和Extra数据01的目标文件还原。关于终端基于其他Diff数据和Extra数据进行目标文件还原的操作亦是如此,以此类推,终端即可基于Patch文件中的各个Diff数据压缩分块和各个Extra数据压缩分块,以及旧文件中的相关数据得到新文件中的所有数据。
[0224] 下述以每个zone使用(x,y,z)表示为例,结合图13对基于Patch文件进行还原的流程进行解释说明。
[0225] 其中,在本示例中,z表示自文件起始位置的指针偏移量。
[0226] 如图13所示,在Patch文件中,zone1中填充的内容为(x1,y1,z1),用于描述Diff数据01压缩分块1、Diff数据01压缩分块2、Extra数据01压缩分块1和Extra数据01压缩分块2。其中,Diff数据01压缩分块1和Diff数据01压缩分块2被解压后得到的Diff数据的字节总长度为x1,Diff数据01压缩分块1被解压后得到的Diff数据01分块1的字符长度为m(假设zonesize=m),Diff数据01压缩分块2被解压后得到的Diff数据01分块2的字节长度为x1‑m(x1‑m≤m);Extra数据01压缩分块1和Extra数据01压缩分块2被解压后得到的Extra数据的字节总长度为y1,Extra数据01压缩分块1被解压后得到的Extra数据01分块1的字符长度为m,Extra数据01压缩分块2被解压后得到的Extra数据01分块2的字符长度为y1‑m(y1‑m≤m)。
[0227] 终端在Patch文件中解析到zone1中填充的(x1,y1,z1)。首先,终端在Patch文件中继续Diff数据01压缩分块1,对Diff数据01压缩分块1进行解压得到m长度的Diff数据,以及在旧文件中读取m长度的数据,并将这两段m长度的数据进行加运算,得到m长度的新文件数据,写入新文件(或者称为目标文件)中。其中,旧文件指针自文件起始位置偏移z1后,终端即可在旧文件中读取与m长度的Diff数据(Diff数据01压缩分块1)对应的m长度的旧文件数据。然后,终端在Patch文件中继续读取Diff数据01压缩分块2,对Diff数据01压缩分块2进行解压得到(x1‑m)长度的Diff数据,以及在旧文件中继续读取(x1‑m)长度的数据,并将这两段(x1‑m)长度的数据进行加运算,得到(x1‑m)长度的新文件数据,写入新文件中。其中,终端即可在旧文件中读取与m长度的Diff数据对应的m长度的旧文件数据之后,旧文件指针继续向前偏移了m,此时终端即可基于指针当前位置继续在旧文件中读取与(x1‑m)长度的Diff数据对应的(x1‑m)长度的旧数据。
[0228] 至此,zone1描述的各个Diff数据01压缩分块已处理完成。
[0229] 终端在Patch文件中继续读取Extra数据01压缩分块1,对Extra数据01压缩分块1进行解压得到m长度的Extra数据,直接写入新文件中。终端在Patch文件中继续读取Extra数据01压缩分块2,对Extra数据01压缩分块2进行解压得到(y1‑m)长度的Extra数据,直接写入新文件中。
[0230] 至此,zone1描述的各个Extra数据01压缩分块也已处理完成。
[0231] 接下来,终端继续在Patch文件中读取到zone2中填充的(x2,y2,z2)。在Patch文件中,zone2用于描述Diff数据02压缩分块1和其他Diff数据02压缩分块2,以及各个Extra数据02压缩分块。终端在Patch文件中继续Diff数据02压缩分块1,对Diff数据02压缩分块1进行解压得到m长度的Diff数据,以及在旧文件中读取m长度的数据,并将这两段m长度的数据进行加运算,得到m长度的新文件数据,继续写入新文件(或者称为目标文件)中。其中,为了使终端可以在旧文件中读取到与m长度的Diff数据(Diff数据02压缩分块1)对应的m长度的旧文件数据,需要基于旧文件起始位置和z2重新确定旧文件指针。也即,旧文件指针自文件起始位置偏移z2后,终端即可在旧文件中读取与m长度的Diff数据(Diff数据01压缩分块1)对应的m长度的旧文件数据。
[0232] 类似的,终端继续对zone2描述的Diff数据02压缩分块以及Extra数据02压缩分块进行数据还原处理。
[0233] 同理,当终端完成对所有zone描述的Diff数据压缩分块以及Extra数据压缩分块的数据还原处理之后,即可完成新文件的还原流程。
[0234] 下述分别对终端基于Diff数据压缩分块以及Extra数据压缩分块进行数据还原时的RAM内存占用情况进行解释说明。
[0235] 需要指出的是,当终端设备进行差分文件还原时,可以申请连续的RAM内存空间,也可以申请不连续的RAM内存空间,本实施例对此不做限定。
[0236] 其中,当终端设备申请不连续的RAM内存空间时,如果RAM内存区域复用,则可以申请两块尺寸与zonesize相同的RAM内存区域,以及一块用于运行数据压缩算法的RAM内存区域(尺寸与数据压缩算法有关)。当终端设备申请不连续的RAM内存空间时,如果RAM内存区域不复用,则可以申请三块尺寸与zonesize相同的RAM内存区域,以及一块用于运行数据压缩算法的RAM内存区域(尺寸与数据压缩算法有关)。
[0237] 在一种可选的实施方式中,如果RAM内存区域复用,则可以申请两块尺寸为(zonesize+N2)的RAM内存区域,以及一块用于运行数据压缩算法的RAM内存区域(尺寸与数据压缩算法有关)。其中,N2为安全缓冲区域的数据尺寸。
[0238] 类似的,如果RAM内存区域不复用,则可以申请三块尺寸为(zonesize+N2)的RAM内存区域,以及一块用于运行数据压缩算法的RAM内存区域(尺寸与数据压缩算法有关)。其中,N2为安全缓冲区域的数据尺寸。
[0239] 由于申请不连续的RAM内存空间,容易产生RAM内存碎片,造成RAM空间浪费,故在本实施例中以终端设备申请连续的RAM内存空间为例进行解释说明。
[0240] 其中,当终端获取到Patch文件时,对Patch文件的header进行解析,获取到数据分块尺寸(zonesize)的值之后,即可基于zonesize的值申请一块连续的RAM内存空间,用于进行差分数据还原操作。
[0241] 在一种可能的实施方式中,RAM内存区域不复用,终端为进行Patch还原操作申请连续的一块RAM内存空间,该RAM内存空间的大小为3*zonesize+N1(字节),其中,N1字节为运行数据压缩算法所需的RAM内存空间的尺寸大小。其中,终端可以将该RAM内存空间划分为四个RAM内存区域,分别为第一RAM内存区域201、第二RAM内存区域202、第三RAM内存区域203和第四RAM内存区域204,参照图14和图15所示。其中,第一RAM内存区域201、第二RAM内存区域202、第三RAM内存区域203的尺寸大小相等,均为zonesize(字节),第四RAM内存区域
204的尺寸大小为N1字节。
[0242] 示例性的,用于对Diff数据压缩分块或Extra数据压缩分块进行数据压缩的数据压缩算法,可以采用LZMA。以支持LZMA运行所需的RAM内存空间最小为16KB为例,则可以设置N1=16。假设zonesize=60KB,则在本实施方式中,终端可以为进行Patch还原操作申请连续的一块M字节的RAM内存空间,M=60*3+16=196KB。
[0243] 其中,第一RAM内存区域201、第二RAM内存区域202、第三RAM内存区域203共同用于Diff数据分块还原处理涉及的数据存储操作,包括但不限于存储Diff数据压缩分块、存储解压后的Diff数据分块,存储加运算后得到的新文件数据分块(New数据分块),以及用于Extra数据分块还原处理涉及的数据存储操作,包括但不限于存储Extra数据压缩分块、存储解压后的Extra数据分块;第四RAM内存区域204用于数据解压操作。
[0244] 示例性的,参照图14,在T0时刻,终端申请到第一RAM内存区域201、第二RAM内存区域202、第三RAM内存区域203和第四RAM内存区域204。在T1时刻,终端在Patch文件中读取到Diff数据01压缩分块1,将Diff数据01压缩分块1写入第一RAM内存区域201中。接下来,终端调用数据压缩算法对第一RAM内存区域201中的Diff数据01压缩分块1进行解压,数据压缩算法执行解压过程使用的RAM内存区域为第四RAM内存区域204,并将解压得到的数据写入第二RAM内存区域202中。在T2时刻,对Diff数据01压缩分块1解压完成,第二RAM内存区域202中暂存的是Diff数据01分块1(字节长度为zonesize)。接下来,终端在运行态镜像文件(相当于未升级的旧文件)中读取与Diff数据01分块1对应的Old数据01分块1(字节长度为zonesize),并暂存在第三RAM内存区域203中,如T3时刻所示。在T3时刻,终端在第三RAM内存区域203中读取Old数据01分块1,以及在第二RAM内存区域202中读取Diff数据01分块1,进行加运算。其中,终端可以对Diff数据01分块1和Old数据01分块1进行加等操作,以使加运算得到的New数据01分块1可以写在第二RAM内存区域202中,对第二RAM内存区域202中暂存的Diff数据01分块1进行覆盖。进而,在T4时刻,终端可以在第二RAM内存区域202中读取New数据01分块1写入静止态镜像文件(或者新建的一个文件)中。其中,静止态镜像文件可以理解为运行态镜像文件的备份。
[0245] 需要指出的是,某个RAM内存区域中暂存的数据可以被覆盖,也可以被清空,本实施例对比不做限定。例如,在第三RAM内存区域203中读取Old数据01分块1,以及在第二RAM内存区域202中读取Diff数据01分块1,进行加运算时,可以将运算结果直接写入第一RAM内存区域201,对其暂存的Diff数据01压缩分块1进行覆盖。再例如,在对第一RAM内存区域201中暂存的Diff数据01压缩分块1进行解压之后,可以清空第一RAM内存区域201中暂存的数据,进而,在第三RAM内存区域203中读取Old数据01分块1,以及在第二RAM内存区域202中读取Diff数据01分块1,进行加运算时,可以将运算结果直接写入第一RAM内存区域201。
[0246] 至此,终端完成基于Diff数据01压缩分块1的数据还原操作。同理,终端可以继续基于Diff数据01压缩分块2继续进行数据还原操作。其中,若Diff数据01压缩分块2为Diff数据01的最后一个压缩分块,则对其解压得到的Diff数据01分块2字节长度小于等于zonesize。
[0247] 当终端基于Diff数据01包括的各个Diff数据01压缩分块完成数据还原操作时,即可继续基于Extra数据01包括的各个Extra数据01压缩分块进行数据还原操作。
[0248] 示例性的,参照图15,在T5时刻,终端在Patch文件中读取到Extra数据01压缩分块1,将Extra数据01压缩分块1写入第一RAM内存区域201中。接下来,终端调用数据压缩算法对第一RAM内存区域201中的Extra数据01压缩分块1进行解压,数据压缩算法执行解压过程使用的RAM内存区域为第四RAM内存区域204,并将解压得到的数据写入第二RAM内存区域
202中。在T6时刻,对Extra数据01压缩分块1解压完成,第二RAM内存区域202中暂存的是Extra数据01分块1(字节长度为zonesize)。进而,在T6时刻,终端可以在第二RAM内存区域
202中读取Extra数据01分块1继续写入静止态镜像文件中。此时,静止态镜像文件中的数据还原到New数据01分块3。
[0249] 至此,终端完成基于Extra数据01压缩分块1的数据还原操作。同理,终端可以继续基于Extra数据01压缩分块2继续进行数据还原操作。其中,若Extra数据01压缩分块2为Extra数据01的最后一个压缩分块,则对其解压得到的Extra数据01分块2字节长度小于等于zonesize。以此类推,当静止态镜像文件中的数据被写满时,终端完成基于Patch文件的数据还原操作。
[0250] 在此种实施方式中,也可以考虑为RAM内存区域设置安全缓冲区,本实施例对此不做限定。示例性的,终端为进行Patch还原操作申请连续的一块RAM内存空间,该RAM内存空间的大小为3*zonesize+3*N2+N1(字节)。其中,N2字节为安全缓冲区所占的RAM内存空间的尺寸大小。关于此种实施方式,在此不再赘述。
[0251] 在另一种可能的实施方式中,RAM内存区域复用,终端为进行Patch还原操作申请连续的一块RAM内存空间,该RAM内存空间的大小为2*zonesize+2*N2+N1(字节),N1字节为运行数据压缩算法所需的RAM内存空间的尺寸大小,N2字节为安全缓冲区所占的RAM内存空间的大小。其中,终端可以将该RAM内存空间划分为五个RAM内存区域,分别为第一RAM内存区域301、第二RAM内存区域302、第三RAM内存区域303、第四RAM内存区域304和第五RAM内存区域305,参照图16和图17所示。其中,第一RAM内存区域301、第三RAM内存区域303的尺寸大小相等,均为zonesize(字节);第五RAM内存区域305的尺寸大小为N1字节;第二RAM内存区域302位于为第一RAM内存区域301和第三RAM内存区域303之间,为第一RAM内存区域301的安全缓冲区域,第四RAM内存区域304位于为第三RAM内存区域303和第五RAM内存区域305之间,为第三RAM内存区域304的安全缓冲区域,且第二RAM内存区域302和第四RAM内存区域304的尺寸大小相等,均为N2字节。
[0252] 示例性的,用于对Diff数据压缩分块或Extra数据压缩分块进行数据压缩的数据压缩算法,可以采用LZMA。以支持LZMA运行所需的RAM内存空间最小为16KB为例,则可以设置N1=16。假设zonesize=90KB,N2=2KB,则在本实施方式中,终端可以为进行Patch还原操作申请连续的一块M字节的RAM内存空间,M=90*2+2*2+16=200KB。
[0253] 其中,第一RAM内存区域301和第三RAM内存区域303共同用于Diff数据分块还原处理涉及的数据存储操作,包括但不限于存储Diff数据压缩分块、存储解压后的Diff数据分块,存储加运算后得到的新文件数据分块(New数据分块),以及用于Extra数据分块还原处理涉及的数据存储操作,包括但不限于存储Extra数据压缩分块、存储解压后的Extra数据分块;第五RAM内存区域304用于数据解压操作。
[0254] 示例性的,参照图16,在T0时刻,终端申请到第一RAM内存区域301、第二RAM内存区域302、第三RAM内存区域303、第四RAM内存区域304和第五RAM内存区域305。在T1时刻,终端在Patch文件中读取到Diff数据01压缩分块1,将Diff数据01压缩分块1写入第一RAM内存区域301中。接下来,终端调用数据压缩算法对第一RAM内存区域301中的Diff数据01压缩分块1进行解压,数据压缩算法执行解压过程使用的RAM内存区域为第五RAM内存区域304,并将解压得到的数据写入第三RAM内存区域303中。在T2时刻,对Diff数据01压缩分块1解压完成,第三RAM内存区域303中暂存的是Diff数据01分块1(字节长度为zonesize)。接下来,终端在运行态镜像文件(相当于未升级的旧文件)中读取与Diff数据01分块1对应的Old数据
01分块1(字节长度为zonesize),并暂存在第一RAM内存区域301中,将Diff数据01压缩分块
1进行覆盖,如T3时刻所示。继续参照T3时刻,终端在第一RAM内存区域301中读取Old数据01分块1,以及在第三RAM内存区域303中读取Diff数据01分块1,进行加运算。其中,终端可以对Diff数据01分块1和Old数据01分块1进行加等操作,以使加运算得到的New数据01分块1可以写在第三RAM内存区域303中,对第三RAM内存区域303中暂存的Diff数据01分块1进行覆盖。进而,在T4时刻,终端可以在第三RAM内存区域303中读取New数据01分块1写入静止态镜像文件中。
[0255] 其中,也可以将加运算得到的New数据01分块1写在第一RAM内存区域301中,对第一RAM内存区域301中暂存的Old数据01分块1进行覆盖。进而,终端可以在第一RAM内存区域301中读取New数据01分块1写入静止态镜像文件中。
[0256] 至此,终端完成基于Diff数据01压缩分块1的数据还原操作。同理,终端可以继续基于Diff数据01压缩分块2继续进行数据还原操作。其中,若Diff数据01压缩分块2为Diff数据01的最后一个压缩分块,则对其解压得到的Diff数据01分块2字节长度小于等于zonesize。
[0257] 当终端基于Diff数据01包括的各个Diff数据01压缩分块完成数据还原操作时,即可继续基于Extra数据01包括的各个Extra数据01压缩分块进行数据还原操作。
[0258] 示例性的,参照图17,在T5时刻,终端在Patch文件中读取到Extra数据01压缩分块1,将Extra数据01压缩分块1写入第一RAM内存区域301中。接下来,终端调用数据压缩算法对第一RAM内存区域301中的Extra数据01压缩分块1进行解压,数据压缩算法执行解压过程使用的RAM内存区域为第五RAM内存区域305,并将解压得到的数据写入第三RAM内存区域
303中。在T6时刻,对Extra数据01压缩分块1解压完成,第三RAM内存区域303中暂存的是Extra数据01分块1(字节长度为zonesize)。进而,在T6时刻,终端可以在第三RAM内存区域
303中读取Extra数据01分块1继续写入静止态镜像文件中。此时,静止态镜像文件中的数据还原到New数据01分块3。
[0259] 至此,终端完成基于Extra数据01压缩分块1的数据还原操作。同理,终端可以继续基于Extra数据01压缩分块2继续进行数据还原操作。其中,若Extra数据01压缩分块2为Extra数据01的最后一个压缩分块,则对其解压得到的Extra数据01分块2字节长度小于等于zonesize。以此类推,当静止态镜像文件中的数据被写满时,终端完成基于Patch文件的数据还原操作。
[0260] 其中,终端申请第二RAM内存区域302,作为第一RAM内存区域301的安全缓冲区,能够第一RAM内存区域301中数据溢出而导致数据处理出错的问题。同理,终端申请第四RAM内存区域304,作为第三RAM内存区域303的安全缓冲区,能够第三RAM内存区域303中数据溢出而导致数据处理出错的问题。
[0261] 需要指出的是,假设某个Diff数据压缩分块或Extra数据压缩分块的尺寸大于压缩前的Diff数据分块或Extra数据压缩的尺寸时,将该数据压缩分块暂存到第一RAM内存区域或第三RAM内存区域中时,会造成数据相应地溢出到第二RAM内存区域或第四RAM内存区域中的情形。此时,终端设备对该数据压缩分块进行数据解压处理时,需要一并对溢出到第二RAM内存区域或第四RAM内存区域中的数据进行解压处理,以此保证解压得到的Diff数据分块或Extra数据分块的正确性。
[0262] 当终端设备申请用于差分数据还原的连续的RAM内存空间为某个确定值时,相比RAM内存区域不复用的情况,RAM内存区域复用能够提高数据还原处理效率。
[0263] 当终端可分配用于差分数据还原处理的RAM内存空间极小时,终端在申请到的RAM内存空间中也可以不划分作为安全缓冲区的第二RAM内存区域302和第四RAM内存区域304。当终端在申请到的RAM内存空间中不划分作为安全缓冲区的第二RAM内存区域302和第四RAM内存区域304时,终端基于Diff数据压缩分块以及Extra数据压缩分块进行数据还原时的RAM内存占用情况也是类似的,在此不再赘述。
[0264] 示例性的,用于对Diff数据压缩分块或Extra数据压缩分块进行数据压缩的数据压缩算法,可以采用LZMA。以支持LZMA运行所需的RAM内存空间最小为16KB为例,则可以设置N1=16。假设zonesize=2KB,则在本实施方式中,终端可以为进行Patch还原操作申请连续的一块M字节的RAM内存空间,M=2*2+16=20KB。
[0265] 这样,终端基于Diff数据压缩分块或Extra数据压缩分块进行数据还原操作时,解压操作及数据存储操作均在指定的RAM内存区域中进行,充分有效地利用了RAM内存空间,差分还原操作消耗的RAM内存较小,使得RAM空间较小的轻量级设备也能具备差分还原能力。
[0266] 对应于图11a‑图11b所示的数据分块划分方式,终端对Patch文件进行数据还原时,申请的用于Patch还原操作的RAM内存空间包括安全缓冲区。其中,安全缓冲区的数据尺寸为N2字节。
[0267] 示例性的,终端申请的RAM内存空间可以是连续的,可以参照图16所示。又示例性的,终端申请的RAM内存空间也可以是非连续的,例如申请三块尺寸为(zonesize+N2)的RAM内存区域,以及一块用于运行数据压缩算法的RAM内存区域(尺寸与数据压缩算法有关)。本实施例对此不做限定。
[0268] 当终端基于某个zone描述的Diff数据压缩分块或Extra数据压缩分块进行数据还原操作,可以基于zone中记录多个Diff数据压缩分块被压缩前对应的Diff数据的总字节长度,zonesize的值,以及申请的安全缓冲区的数据尺寸,计算是否存在字节长度大于zonesize的Diff数据分块。
[0269] 如果不存在字节长度大于zonesize的Diff数据分块,则终端基于多个Diff数据压缩分块进行数据还原的处理流程可以参见前文,在此不再赘述。
[0270] 假设某个zone描述的最后一个Diff数据压缩分块(如Diff数据01压缩分块n1)被压缩前的Diff数据分块的字节长度大于zonesize,下述对终端基于Diff数据01压缩分块n1进行数据还原处理的流程进行解释说明。
[0271] 参照图18,在T1时刻,终端在Patch文件中读取到Diff数据01压缩分块n1,将Diff数据01压缩分块n1写入第一RAM内存区域301中。接下来,终端调用数据压缩算法对第一RAM内存区域301中的Diff数据01压缩分块n1进行解压,数据压缩算法执行解压过程使用的RAM内存区域为第五RAM内存区域304,并将解压得到的数据写入第三RAM内存区域303中。在T2时刻,对Diff数据01压缩分块n1解压完成,解压得到Diff数据01分块n1暂存到第三RAM内存区域303中。由于Diff数据01分块n1被压缩前的字节长度大于zonesize,则Diff数据01分块n1不仅将第三RAM内存区域303写满,部分数据还会写入第四RAM内存区域304中。接下来,终端在运行态镜像文件(相当于未升级的旧文件)中读取与Diff数据01分块n1对应的Old数据01分块n1(字节长度大于zonesize),并暂存在第一RAM内存区域301中。其中,Old数据01分块n1不仅将将第一RAM内存区域301写满,部分数据还会写入第二RAM内存区域302中,如T3时刻所示。继续参照T3时刻,终端在第一RAM内存区域301和第二RAM内存区域302中读取Old数据01分块n1,以及在第三RAM内存区域303和第四RAM内存区域304中读取Diff数据01分块n1,进行加运算。其中,终端可以对Diff数据01分块n1和Old数据01分块n1进行加等操作,以使加运算得到的New数据01分块n1可以写在第三RAM内存区域303和第四RAM内存区域304中。进而,在T4时刻,终端可以在第三RAM内存区域303和第四RAM内存区域304中读取New数据01分块n1写入静止态镜像文件中。
[0272] 假设某个zone描述的最后一个Extra数据压缩分块(如Extra数据01压缩分块n2)被压缩前的Extra数据分块的字节长度大于zonesize,下述对终端基于Extra数据01压缩分块n2进行数据还原处理的流程进行解释说明。
[0273] 示例性的,参照图19,在T5时刻,终端在Patch文件中读取到Extra数据01压缩分块n2,将Extra数据01压缩分块n2写入第一RAM内存区域301中。接下来,终端调用数据压缩算法对第一RAM内存区域301中的Extra数据01压缩分块n2进行解压,数据压缩算法执行解压过程使用的RAM内存区域为第五RAM内存区域305,并将解压得到的数据写入第三RAM内存区域303中。在T6时刻,对Extra数据01压缩分块n2解压完成,解压得到Extra数据01分块n2暂存到第三RAM内存区域303中。由于Extra数据01分块n2被压缩前的字节长度大于zonesize,则Extra数据01分块n2不仅将第三RAM内存区域303写满,部分数据还会写入第四RAM内存区域304中。进而,在T6时刻,终端可以在第三RAM内存区域303和第四RAM内存区域304中读取Extra数据01分块n2继续写入静止态镜像文件中。此时,静止态镜像文件中的数据还原到New数据01分块n2。
[0274] 在一种示例中,如果终端解析到Patch文件的头部中标志字段的值,确定判断出存在字节长度大于zonesize的数据分块(包括Diff数据分块和Extra数据分块),则可以依据如图17和18所示的处理流程进行数据还原处理。
[0275] 这样,当某个数据分块的尺寸稍大于zonesize,终端也可以借助于安全缓冲区完成相应的数据还原操作。
[0276] 在一种示例中,Patch文件的数据结构中,Header中除了填充zonesize字段外,还可以填充数据压缩分块最大字节长度(LengthMAX)字段,该字段的值用于指示各个数据压缩分块(包括Diff数据压缩分块和Extra数据压缩分块)的最大数据尺寸。
[0277] 在此情形下,终端对Patch文件进行解析时,可以基于LengthMAX字段的值判断接收到的Patch文件是否有误。例如,假设Patch文件中某个Diff数据压缩分块或Extra数据压缩分块尺寸超过LengthMAX字段的值,终端则可以确定该Patch文件有误,进而不再基于该Patch文件进行数据还原操作。
[0278] 在又一种示例中,Patch文件的数据结构中,Header中除了填充zonesize字段外,还可以填充目标文件数据总长度(NewfileLength)字段,该字段的值用于指示基于该Patch文件还原得到的目标文件的数据总长度。
[0279] 在此情形下,终端在基于Patch文件进行目标文件还原时,可以基于NewfileLength字段的值判断还原得到目标文件是否正确。例如,假设基于Patch文件进行数据还原得到的目标文件的数据长度小于或大于NewfileLength字段的值,终端则可以确定还原得到的目标文件有误,进而不再基于该目标文件进行固件升级。
[0280] 在另一种示例中,Patch文件的数据结构还可以包括校验字段,该字段的值用于指示基于该Patch文件还原得到的目标文件的哈希值。
[0281] 终端在基于Patch文件进行目标文件还原时,还可以基于校验字段的值判断还原得到目标文件是否正确。例如,假设基于Patch文件进行数据还原得到的目标文件的哈希值,与校验字段的值不同,终端则可以确定还原得到的目标文件有误,进而不再基于该目标文件进行固件升级。
[0282] 这样,在本申请实施例中,将Patch数据拆分为大小可控的差分还原单元数据,其数据尺寸与终端RAM空间大小有关,以使终端设备每次只需对一块差分还原单元数据进行处理,进而使得RAM空间有限的轻量级设备也能具备差分还原能力。
[0283] 上述以一组镜像文件(包括运行态镜像文件和静止态运行文件)为例进行解释说明,同理也可以基于其他Patch文件对应地将其他静止态镜像文件中数据写满,由此得到与升级包对应的所有镜像文件。此时,终端即可基于这些镜像文件进行固件升级。关于终端基于这些镜像文件进行固件升级的解释可以参照已有技术,在此不再赘述。
[0284] 需要指出的是,在前述差分文件的生成方法实施例中,以Diff数据服务器是基于减运算生成为例进行解释说明的。相应的,在前述差分文件的还原方法实施例中,终端基于加运算对Diff数据进行还原为例进行解释说明的。其中,Diff数据还可以是服务器基于其他运算生成的,暂且称之为Diff数据是服务器基于第一运算生成的。相应的,终端可以基于第二运算对Diff数据进行还原,第二运算为第一运算的逆运算。本实施例对第一运算和第二运算不做限定。
[0285] 需要指出的是,在前述差分文件的生成方法实施例以及差分文件的还原方法实施例中,均以固件文件为例进行解释说明。其中,本实施例提供的差分文件的生成方法以及差分文件的还原方法还可以适用于其他文件类型的差分还原处理,例如补丁文件、APK(Android application package,Android应用程序包)等。
[0286] 另外,本申请实施例提供的差分文件的还原方法,不仅适用于RAM内存空间较小(例如小于第一预设阈值)的轻量级电子设备,还适用于可用于进行差分文件还原的RAM内存空间较小(例如小于第二预设阈值)的其他电子设备。
[0287] 也就是说,当电子设备的RAM内存空间不小,但其分配用于进行差分文件还原的RAM内存空间较小时,电子设备可以执行本实施例提供的差分文件的还原方法,以使用较小的RAM内存空间来实现对差分文件的还原功能。
[0288] 图20示例性的示出了一种应用场景。如图20中(1)所示,用户使用手机玩游戏时,界面上弹出对话框700。其中,对话框700中的内容显示“当前检测到xx补丁,是否立即下载并更新”。若用户同意,则可以点击“是”选项701。响应于用户的操作,对话框消失,如图20中(2)所示,用户继续使用手机玩游戏。与此同时,手机后台执行下载xx补丁,基于下载的xx补丁进行差分文件还原的操作,以及基于还原后的补丁文件进行热更新。
[0289] 在该应用场景中,虽然手机的RAM内存空间不小,但手机分配的用于进行差分文件还原操作的RAM内存空间有限,以不对用户使用手机的体验产生影响。此时,若手机执行本申请实施例提供的差分文件的还原方法,则可以通过较小的RAM内存空间实现差分数据还原功能,同时也不会对用户的使用体验产生影响。
[0290] 在另外一些应用场景中,假设用户开启了手机的APK自动更新功能,则在用户使用手机的同时,手机后台可能进行APK差分包下载及差分还原操作。虽然手机的RAM内存空间不小,但为了不对用户的使用体验产生影响,手机分配用于进行差分文件还原操作的RAM内存空间通常会较小。此时,若手机执行本申请实施例提供的差分文件的还原方法,则可以通过较小的RAM内存空间实现差分数据还原功能,同时也不会对用户的使用体验产生影响。
[0291] 如图21所示为电子设备100的结构示意图。可选地,电子设备100可以称为终端,也可以称为终端设备,例如可以为智能手机等,终端可以为可穿戴式电子设备,例如可以是智能手表,本申请不做限定。需要说明的是,电子设备100的结构示意图可以适用于图1中的智能手表100或手机200。应该理解的是,图21所示电子设备100仅是电子设备的一个范例,并且电子设备100可以具有比图中所示的更多的或者更少的部件,可以组合两个或多个的部件,或者可以具有不同的部件配置。图21中所示出的各种部件可以在包括一个或多个信号处理和/或专用集成电路在内的硬件、软件、或硬件和软件的组合中实现。
[0292] 电子设备100可以包括:处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器
170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器192,摄像头
193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。其中传感器模块180可以包括压力传感器,陀螺仪传感器,加速度传感器,温度传感器,PPG(Photo Plethysmo Graphy,光电容积脉搏波)传感器,运动传感器,气压传感器,磁传感器,距离传感器,接近光传感器,指纹传感器,触摸传感器,环境光传感器,骨传导传感器等。
[0293] 处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processing unit,GPU),图像信号处理器(image signal processor,ISP),控制器,存储器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural‑network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。处理器110中还可以设置存储器,用于存储指令和数据。
[0294] 充电管理模块140用于从充电器接收充电输入。充电管理模块140为电池142充电的同时,还可以通过电源管理模块141为电子设备供电。
[0295] 电子设备100的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。移动通信模块150可以提供应用在电子设备100上的包括2G/3G/4G/5G等无线通信的解决方案。无线通信模块160可以提供应用在电子设备100上的包括无线局域网(wireless local area networks,WLAN)(如无线保真(wireless fidelity,Wi‑Fi)网络),蓝牙(bluetooth,BT),全球导航卫星系统(global navigation satellite system,GNSS),调频(frequency modulation,FM),近距离无线通信技术(near field communication,NFC),红外技术(infrared,IR)等无线通信的解决方案。
[0296] 在一些实施例中,电子设备100的天线1和移动通信模块150耦合,天线2和无线通信模块160耦合,使得电子设备100可以通过无线通信技术与网络以及其他设备通信。
[0297] 电子设备100通过GPU,显示屏194,以及应用处理器等实现显示功能。处理器110可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
[0298] 显示屏194用于显示图像,视频等。显示屏194包括显示面板。在一些实施例中,电子设备100可以包括1个或N个显示屏194,N为大于1的正整数。
[0299] 外部存储器接口120可以用于连接外部存储卡,例如Micro SD卡,实现扩展电子设备100的存储能力。内部存储器121可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。处理器110通过运行存储在内部存储器121的指令,从而执行电子设备100的各种功能应用以及数据处理,使得电子设备100实现本申请实施例中的固件文件还原方法。
[0300] 在本申请实施例中,内部存储器121可以用于存储实现本申请实施例中差分文件生成方法的程序、差分文件还原方法的程序、BSDiff算法的程序等。
[0301] 电子设备100可以通过音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,以及应用处理器等实现音频功能。例如音乐播放,录音等。
[0302] 音频模块170用于将数字音频信息转换成模拟音频信号输出,也用于将模拟音频输入转换为数字音频信号。音频模块170还可以用于对音频信号编码和解码。在一些实施例中,音频模块170可以设置于处理器110中,或将音频模块170的部分功能模块设置于处理器110中。
[0303] 陀螺仪传感器可以用于检测电子设备100的运动姿态。在一些实施例中,可以通过陀螺仪传感器确定电子设备100围绕三个轴(即,x,y和z轴)的角速度。在一些实施例中,陀螺仪传感器还可以用于识别电子设备的姿态,以实现对佩戴或者手持电子设备100的用户进行行为状态的识别。
[0304] 加速度传感器可以用于检测电子设备100在各个方向上(一般为三轴)加速度的大小。在一些实施例中,当电子设备100静止时,可以通过加速度传感器检测出重力的大小及方向。在一些实施例中,加速度传感器还可以用于识别电子设备的姿态,以实现对佩戴或者手持电子设备100的用户进行行为状态的识别。
[0305] 温度传感器可以用于检测电子设备100的温度。在一些实施例中,可以通过温度传感器检测电子设备100佩戴用户的体温。
[0306] PPG(Photo Plethysmo Graphy,光电容积脉搏波)传感器可以用于检测电子设备100佩戴者的生理参数信息。PPG传感器的原理是通过光学检测出组织微血管床中血容量在心脏收缩舒张作用下的波动性变化。例如,心脏收缩时,组织的血容量增多、光吸收量增加,则光检测器检测到的光强度较小;心脏舒张时,组织的血容量减少、光吸收量减少,则光检测器检测到的光强度较大。由于PPG传感器光强度的变化与组织的血液灌注的微小变化相关,所以可以用来提供电子设备100佩戴者心血管系统的信息,例如血压、血氧、脉搏率(心率)和呼吸率等生理参数信息。
[0307] 压力传感器用于感受压力信号,可以将压力信号转换成电信号。在一些实施例中,压力传感器可以设置于显示屏194。电子设备100也可以根据压力传感器的检测信号计算触摸的位置。
[0308] 触摸传感器,也称“触控面板”。触摸传感器可以设置于显示屏194,由触摸传感器与显示屏194组成触摸屏,也称“触控屏”。触摸传感器用于检测作用于其上或附近的触摸操作。触摸传感器可以将检测到的触摸操作传递给应用处理器,以确定触摸事件类型。
[0309] 按键190包括开机键(或称电源键),音量键等。按键190可以是机械按键。也可以是触摸式按键。电子设备100可以接收按键输入,产生与电子设备100的用户设置以及功能控制有关的键信号输入。
[0310] 马达191可以产生振动提示。马达191可以用于来电振动提示,也可以用于触摸振动反馈。
[0311] 指示器192可以是指示灯,可以用于指示充电状态,电量变化,也可以用于指示消息。
[0312] 电子设备100的软件系统可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构。本申请实施例以分层架构的操作系统为例,示例性说明电子设备100的软件结构。
[0313] 图22是本申请实施例的电子设备100的软件结构框图。
[0314] 电子设备100的分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,以电子设备100为智能手表为例,如图22所示,可以将操作系统分为六层,从上至下分别为UI(User Interface,用户界面)应用层,系统服务层,算法层,硬件抽象层,内核层,以及驱动层。
[0315] UI应用层可以包括一系列应用程序包,例如可以是表盘、运动记录、通话、锻炼等。
[0316] 系统服务层可以包括一系列系统服务。系统服务层可以包括心率服务,心率服务可以提供智能手表佩戴者的生理参数信息,例如血压、血氧、脉搏率、呼吸率和体温等,还可以检测智能手表佩戴者的生理参数变化信息。系统服务层还可以包括计步服务、卡路里服务、心脏健康服务。
[0317] 算法层可以包括一系列算法模型。如图22所示,算法层可以包括差分还原算法模型。其中,差分还原算法模型可以用于本实施例提供的差分文件还原方法。
[0318] 硬件抽象层(hardware abstraction layer,HAL)为位于操作系统内核与硬件电路之间的接口层。HAL层包括但不限于音频HAL。其中,音频HAL用于对音频流进行处理,例如,对音频流进行降噪、定向增强等处理。
[0319] 内核层和驱动层是硬件和软件之间的层。如图22所示,内核层至少包括操作系统内核,驱动层至少包括蓝牙驱动,WiFi驱动等。
[0320] 可以理解的是,图22示出的软件结构中的层以及各层中包含的部件,并不构成对电子设备100的具体限定。在本申请另一些实施例中,电子设备100可以包括比图示更多或更少的层,以及每个层中可以包括更多或更少的部件,本申请不做限定。
[0321] 可以理解的是,电子设备100为了实现本申请实施例中的差分文件的还原方法,其包含了执行各个功能相应的硬件和/或软件模块。结合本文中所公开的实施例描述的各示例的算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以结合实施例对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
[0322] 一个示例中,图23示出了本申请实施例的一种装置800的示意性框图,装置800可包括:处理器801和收发器/收发管脚802,可选地,还包括存储器803。
[0323] 装置800的各个组件通过总线804耦合在一起,其中总线804除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图中将各种总线都称为总线804。
[0324] 可选地,存储器803可以用于存储上述差分文件生成方法实施例中服务器的指令。该处理器801可用于执行存储器803中的指令,并控制接收管脚接收信号,以及控制发送管脚发送信号。
[0325] 可选地,存储器803可以用于存储上述差分文件还原方法实施例中智能终端的指令。该处理器801可用于执行存储器803中的指令,并控制接收管脚接收信号,以及控制发送管脚发送信号。
[0326] 装置800可以是上述差分文件生成方法实施例中服务器,例如OTA服务器,或者是上述差分文件还原方法实施例中智能终端,例如智能手机、智能手表等。
[0327] 本实施例还提供一种计算机存储介质,该计算机存储介质中存储有计算机指令,当该计算机指令在电子设备上运行时,使得电子设备执行上述相关方法步骤实现上述实施例中的差分文件的生成方法,或者使得电子设备执行上述相关方法步骤实现上述实施例中的差分文件的还原方法。
[0328] 本实施例还提供了一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述相关步骤,以实现上述实施例中的差分文件的生成方法,或者实现上述实施例中的差分文件的还原方法。
[0329] 另外,本申请的实施例还提供一种装置,这个装置具体可以是芯片,组件或模块,该装置可包括相连的处理器和存储器;其中,存储器用于存储计算机执行指令,当装置运行时,处理器可执行存储器存储的计算机执行指令,以使芯片执行上述方法实施例中的差分文件的生成方法或者差分文件的还原方法。
[0330] 其中,本实施例提供的电子设备(如服务器或终端等)、计算机存储介质、计算机程序产品或芯片均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
[0331] 通过以上实施方式的描述,所属领域的技术人员可以了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
[0332] 在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0333] 以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。