CN100517220C - 对存储在存储装置中的内容的版本进行更新的方法和系统 - Google Patents
对存储在存储装置中的内容的版本进行更新的方法和系统 Download PDFInfo
- Publication number
- CN100517220C CN100517220C CNB2004800213727A CN200480021372A CN100517220C CN 100517220 C CN100517220 C CN 100517220C CN B2004800213727 A CNB2004800213727 A CN B2004800213727A CN 200480021372 A CN200480021372 A CN 200480021372A CN 100517220 C CN100517220 C CN 100517220C
- Authority
- CN
- China
- Prior art keywords
- version
- subclauses
- clauses
- update package
- redaction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
- 238000000034 method Methods 0.000 title claims description 89
- 238000006243 chemical reaction Methods 0.000 claims abstract description 23
- 238000006073 displacement reaction Methods 0.000 claims description 138
- 230000014509 gene expression Effects 0.000 claims description 58
- 238000012986 modification Methods 0.000 claims description 53
- 230000004048 modification Effects 0.000 claims description 53
- 230000005055 memory storage Effects 0.000 claims description 20
- 238000004590 computer program Methods 0.000 claims description 7
- 238000012804 iterative process Methods 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 23
- 230000008569 process Effects 0.000 description 12
- 238000012217 deletion Methods 0.000 description 6
- 230000037430 deletion Effects 0.000 description 6
- 230000008859 change Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 239000002131 composite material Substances 0.000 description 3
- 150000001875 compounds Chemical class 0.000 description 3
- 230000006872 improvement Effects 0.000 description 2
- 239000000654 additive Substances 0.000 description 1
- 230000000996 additive effect Effects 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000007493 shaping process Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种用于生成内容的旧版本与内容的新版本之间的紧凑更新包的系统。该系统包括:转换元素生成器,用于生成与旧版本和新版本相关联的转换元素;经修改版本生成器,用于生成经修改的版本,该生成包括对该旧版本应用该转换元素;更新包生成器,用于生成该紧凑更新包。该紧凑更新包包括该转换元素以及基于该经修改的版本和该新版本的修改增量。
Description
技术领域
本发明涉及创建存储在存储装置中的内容的紧凑(compact)更新版本。
背景技术
US 6,546,552公开了一种用于生成旧程序与新程序之间的紧凑差异结果的方法。每一个程序都包括多个引用条目,这些引用条目包含引用(refer to)该程序中的其他条目的引用(reference)。该方法包括对旧程序进行扫描的多个步骤,并针对各个引用条目执行包括使用特有的标签标记来替换该条目的引用的多个步骤,由此生成经修改的旧程序。还提供了对新程序进行扫描的步骤,并针对各个引用条目执行包括使用特有的标签标记来替换该条目的引用的步骤,由此生成经修改的新程序。还提供了直接或间接地利用该经修改的旧程序和该经修改的新程序来生成指定的差异结果的步骤。
在该领域中,需要提供一种用于对存储在存储装置中的内容的版本进行更新的新方法和系统。
发明内容
本发明提供了一种用于生成紧凑更新包的方法,所述紧凑更新包用于将内容的旧版本更新为内容的新版本,该方法包括:(i)根据所述旧版本和新版本间差异的结果生成转换元素;(ii)从所述旧版本和新版本中选择一选择版本;(iii)生成经修改的版本,该生成包括对所述选择版本应用所述转换元素;(iv)根据所述经修改的版本获得修改增量并且从所述旧版本和新版本中获得第二版本,所述第二版本与所述选择版本不同;以及(v)生成所述紧凑更新包,该紧凑更新包包括所述转换元素以及所述修改增量。
本发明还提供了一种用于对内容的旧版本进行更新以生成内容的新版本的方法,该方法包括:(i)获得紧凑更新包;所述紧凑更新包包括:与所述旧版本和新版本相关联的转换元素;修改增量;以及前向更新或后向更新的指示;(ii)生成经修改的版本,该生成包括在前向更新指示的情况下对所述旧版本应用所述转换元素或者在后向更新指示的情况下对所述旧版本应用所述修改增量;(iii)生成所述新版本,该生成包括在前向更新指示的情况下对所述经修改的版本应用所述修改增量或者在后向更新指示的情况下对在所述经修改的版本应用所述转换元素。
本发明还提供了一种用于生成更新包的方法,该更新包用于将所述内容的旧版本更新为其新版本,该方法包括:确定表示所述旧版本的引用条目中的被引用条目的地址的值;对所述旧版本中的被引用条目确定修改位移;设定整数位移规则,以使得能够根据所述修改位移对所述引用条目进行修改;以及将所述整数位移规则结合在转换元素中,所述转换元素是所述更新包的一部分。
本发明的另一方面提供了一种嵌入在计算机电路和计算机可读介质至少之一的系统,用于生成紧凑更新包,所述紧凑更新包用于将内容的旧版本更新为内容的新版本,该系统包括:版本选择器,用于从所述旧版本和新版本中选择一选择版本;转换元素生成器,用于根据所述旧版本和新版本间差异的结果生成转换元素;经修改版本生成器,用于生成经修改的版本,该生成包括对所述选择版本应用所述转换元素;修改增量获得单元,用于根据所述经修改的版本获得修改增量并且从所述旧版本和新版本中获得第二版本,所述第二版本与所述选择版本不同;以及更新包生成器,用于生成所述紧凑更新包,该紧凑更新包包括所述转换元素以及所述修改增量。
本发明还提供了一种用于对内容的旧版本进行更新以生成内容的新版本的系统,该系统包括:输入模块,被构造用来获得紧凑更新包;所述紧凑更新包包括:与所述旧版本和新版本相关联的转换元素;修改增量;以及前向更新或后向更新的指示;用于生成经修改的版本的装置,该生成包括在前向更新指示的情况下对所述旧版本应用所述转换元素或者在后向更新指示的情况下对所述旧版本应用所述修改增量;以及用于生成所述新版本的装置,该生成包括在前向更新指示的情况下对所述经修改的版本应用所述修改增量或者在后向更新指示的情况下对在所述经修改的版本应用所述转换元素。
附图说明
为了理解本发明并了解如何在实际中实施,现将参照附图,仅以非限制性示例的方式对优选实施例进行说明,附图中:
图1是根据本发明一个实施例的在移动电话网络中提供版本更新的系统的示意图;
图2是用于将内容的旧版本更新为新版本的更新包的示意图;
图3是根据本发明一个实施例的表示条目的整数值的示意图;
图4示出了根据本发明一个实施例的图2的更新包的使用整数表示法(notation)的一部分;
图5是根据本发明一个实施例的旧版本和通过对其进行更新而获得的新版本的示意图;
图6示出了用于将图5的旧版本更新为其新版本的更新包的一部分;
图7是根据本发明一个实施例的对更新包中的数字位移规则的生成进行详细说明的流程图;
图8示出了根据本发明一个实施例的示例性内容和相关元数据;
图9是根据本发明一个实施例的旧版本以及通过对其进行更新而获得的新版本的示意图;
图9A是根据本发明一个实施例的与图9的旧版本和新版本相关联的元数据的示意图;
图10示出了根据本发明一实施例的差异表及其根据图9的示例的对应引用位移规则;
图11是根据本发明一个实施例的与图9的旧版本和新版本相关的部分元数据的示意图;
图12示出了根据本发明一实施例的差异表及其根据图9和11的示例的对应引用位移规则;
图13是根据本发明一个实施例的对更新包中的引用位移规则的生成进行详细说明的流程图;
图14是根据本发明的迭代实施例的内容的迭代更新版本的示意图;
图15是对本发明的迭代实施例进行详细说明的流程图;
图16是说明对内容的旧版本进行更新以生成内容的新版本的流程图;
图17示出了根据本发明一个实施例的用于生成内容的旧版本与内容的新版本之间的紧凑更新包的系统;以及
图18示出了根据本发明一个实施例的用于对内容的旧版本进行更新以生成内容的新版本的系统。
具体实施方式
图1是根据本发明一个实施例的在移动电话网络中提供版本更新的系统101的示意图。与存储器装置相连的移动电话102执行使其能够进行操作的程序。以下将当前正在移动电话上执行的程序的版本称为旧版本。经常需要对这些程序进行更新,以使得电话102可以执行其新版本。该新版本在版本生成器105(例如,个人计算机(PC))中生成。该新版本被存储在服务器103中并经由发送器104发送至移动电话102。
应该注意,图1所示的系统101是非限制性的示例,并且本发明并不限于移动电话网络或程序的更新。许多其他类型的内容也需要更新,例如存储在存储装置中的数据。例如,个人计算机(PC)或者任意其他计算机可以存储包括其操作所需的数据或者在其上执行的程序的运行所需的数据的文件(例如,本领域的技术人员已知的“信息文件(infofile)”)。经常需要经由通信线路,例如经由互联网对该数据进行更新。
因此,下文中将使用术语“内容”而不是“程序”。同样,将使用术语“存储装置”而不是图1中的移动电话的存储器装置。
为了对存储在存储装置中的内容进行更新,生成更新包并将其存储在服务器中,并且将其发送至存储装置或者与其相连的其他装置。
应该注意,存储装置可以与嵌入装置相关联。该嵌入装置例如可以是包括诸如移动电话和/或消费者电子装置的组中的成员。另选地,该存储装置可以与计算机相关联。
图2是用于将内容的旧版本202更新为新版本203的更新包201的示意图。内容的旧版本(例如旧版本202)也被简称为“旧版本”。同样,内容的新版本(例如新版本203)也被简称为“新版本”。
应该注意,可以根据对于本领域的技术人员本身已知的方法来生成更新包201。类似地,应用该更新包以将旧版本202更新为新版本203的方法也是已知的。
还应该注意,更新包常常被称为“增量文件”、“差异文件”或者被简称为“增量”或“差异”,其中该增量是在将旧版本更新为新版本时发生的修改的集合。因此,本领域的技术人员应该理解,更新包可以是增量文件,或者另选地,其可以包括增量文件和可能的附加信息。
旧版本202包括五个条目的块204,每一个条目都可以是至少一个字的大小、一个或更多个字节的大小,或者任意其他可适用的量度。块204后面是例如五百个条目的第二块205。接下来,旧版本202包括条目206,该条目包括至少一个对第二块205中的特定条目207的引用(例如指针)。以下将包括至少一个引用的条目称为“引用条目”。例如,引用条目206可以包括与对207的绝对引用相关联的指令,例如“跳转到条目207的绝对地址”。
应该理解,如果由旧版本和新版本(例如202和203)表示的内容例如是计算机程序,则如本领域的技术人员所知,块可以表示程序函数。
引用条目206后面是另一引用条目208,其包括对第二块205中的不同条目209的引用。引用条目208后面是其他引用条目,它们都包括对第二块205中的条目的引用,它们中的最后一个是引用条目210。尽管图中未示出,但是根据该示例,在引用条目206和引用条目210之间例如有一百个引用条目。
应该理解,旧版本202还可以包括非引用条目,即,不包含引用的条目。条目211是非引用条目的示例。除非具体说明,术语“条目”在下文中是指引用和非引用条目两者。
另外,旧版本202可以包括对未包含在旧版本202中的其他条目的引用条目,即,对该内容外部的条目的引用。例如,如果旧版本代表在执行期间加载到计算机的RAM(随机存取存储器)中的计算机程序,则这种引用条目可以指存储在该RAM的用于存储该程序的区域外部的区域中的另一条目。
下文中,将包括对包含在该内容中的条目的至少一个引用的引用条目称为“显式引用条目”,而将包括对该内容外部的条目的至少一个引用的引用条目称为“隐式引用条目”。
返回到图2,尽管图中未示出,但是在最后一个引用条目210后面有七十个条目。为方便起见,下文中将这七十个条目(包括条目211)称为“终止条目”212。这七十个条目包括非引用条目(例如条目211)和/或隐式引用条目(例如条目213)。应该说明的是,要根据该示例进行更新的任意内容的大小没有限制,因此该内容的任意块的任意大小也没有限制。
尽管图2中未示出,但是引用条目之间可以存在非引用条目,并且引用条目不需要连续。例如,在引用条目206、208、…210之间的某处可以有一个或更多个非引用条目。
更新包201用于对内容的旧版本202进行修改,以生成该内容的新版本203。根据更新包201来执行更新处理,以生成该新版本203。
在该示例中,旧版本202与新版本203之间的一个差异是新版本203中没有块204,其中第二块205后移并占用了存储装置上的块204。根据该示例,块204包括五个条目,因此第二块205后移了五个条目。因此,可以理解,随着块205的后移,包括在其中的所有条目都相应地进行位移(位移了五个条目)。例如,对于条目207和209(及其在新版本中的对应条目207’和209’)同样如此。应该注意,条目206包括对条目207的引用。在将条目206后移以生成条目206’之后,该条目仍然引用条目207,即,其引用旧版本中的207的地址。需要替换条目206’的内容,以使其在新版本中引用新位置中的条目207’。
应该注意,在这种情况下,不包括引用的非引用条目211的内容以及隐式引用条目213的内容不需要修改,尽管它们的位置也上移了五个条目。还应该注意,在整个说明书中,除非特别指出,否则也可以将应用于显式引用条目的示例应用于隐式引用条目。
现在回到更新包201,其包括用于将旧版本202更新为新版本203的命令。应该认为,在当前示例中,命令被表示为字符串,这些字符串表示要通过对旧版本进行更新来执行的一个或更多个操作(例如,“复制”、“替换”等)。然而,用于表示命令的其他方式也是适用的,例如使用操作码(简称为op码),其中每一个命令都具有分配给它的预定op码。另外,对于201中所示的命令,经常通过另选方式来表示命令。例如,“替换”命令可以由插入命令来表示,其中所插入的内容替换了现有内容。
如图所示,包含在包201中的第一命令是删除五个条目,由此删除102中的前五个条目,即块204。接下来,该更新包包括下述的命令,该命令用于将五百个条目复制到新版本的起始位置,由此将块205后移五个条目,以生成块205’。
在复制块205之后,表面上需要复制条目206、208、…、210,同时将它们的位置上移五个块,以生成对应的条目206’、208’、…、210’。然而,如上所述,需要将条目206’、208’、…、210’所包含的引用更新为引用207’、209’,…,而不是207、209,…。即,需要替换这些引用条目或者它们中的至少一部分。可以直接替换该条目,而不是复制引用条目并随后使用经位移的引用对其进行替换,从而省略了复制操作。因此,该更新包201包括一百条替换命令,每一个引用条目206、208、…、210一个替换命令,以使用对于对应的经位移条目(206’、208’、…、210’)的引用来替换它们。
在这一百条替换命令之后,该更新包201包括复制命令,用于将七十个终止条目212复制到新版本203中的经替换的一百个引用条目的后面,即,在新版本203中,这七十个条目(包括用于生成条目211’和213’的条目211和213)后移五个条目。
本领域的技术人员可以理解,以上示例中的更新包201在这些命令当中包括一百个替换命令,其中每一个命令都包括替换条目。即,更新包201包括一百个替换条目。注意,更新包可以通过有限带宽通信线路(例如,互联网或移动电话(蜂窝电话)网络)传送,所以减小更新包的尺寸是有益的。
因此,与现有技术中的用于生成和应用更新包的现有方法不同,本发明公开了可以生成更高效的更新包,或者下文中被称为“紧凑更新包”的其他方法。下文中,将用于生成这种高效更新包的一个实施例称为“整数表示法实施例”,其中该实施例生成“整数位移规则”。以下参照图2和3来举例说明整数位移规则。
应该理解,根据本发明的某些实施例,可以使用整数值来表示旧内容和新内容(分别为202和203)中的条目。可以理解,条目是存储在诸如磁盘或存储器的存储装置中的数据。如果条目的大小为四个字节,则可以将存储在条目中的数据形象化为占用这四个字节的整数。图3是根据本发明一个实施例的四字节条目301的整数表示的示意图。最高有效字节(最左侧字节)302被二进制值00001011(十六进制为0x0B)占用,第二字节303被二进制值10011101(十六进制为0x9D)占用,第三字节304被值11110111(十六进制为0xF7)占用,而最低有效字节305被值10000101(十六进制位0x85)占用。因此,可以将这四个字节表示为具有十六进制值0x0B9DF785的一个整数。也就是说,整数0x0B9DF785是条目301的整数表示,或者下文中所称的int(301)。应该注意,“int”代表“integer(整数)”。
应该注意,包括非引用条目在内的任意条目也都可以由整数来表示,因此,例如int(211)是条目211的整数表示。
现返回到图2,例如,显式引用条目206可以包括程序指令“跳转至条目207的绝对地址”。如果条目207的绝对地址为0x9DF785,则包含在条目206中的指令等价于“跳转至0x9DF785”。程序指令可以由预定的op码来表示。因此,“跳转至”的op码例如可以是十进制整数“11”(或者十六进制的0xB)。如以上参照图3所述,根据本示例的条目206的整数表示为0x0B9DF785。在这种情况下,op码由字节302表示,而字节303、304和305表示被引用条目。即,字节303、304和305一起表示被引用条目,或者下文中所称的ind(207)。应该注意,“ind”表示“indicative(表示)”。
另选地,可以将整个整数视为表示被引用条目。根据该示例,如果条目206包括指令“跳转至条目207”,则可以将整数0x0B9DF785视为ind(207),这与前面的实施例不同,其中只将0x9DF785视为该表示值。应该理解,可以存在另一引用条目(尽管图2中未示出),其可以包括诸如“调用条目207”的指令,其中该调用指令的op码为十进制整数27(或者十六进制的0x1B)。根据该示例,int(引用条目)为0x1B9DF785。另外,在这种情况下,可以将0x1B9DF785称为ind(被引用条目)或者ind(207)。即,根据该实施例,对于被引用条目的地址可以有一个以上的表示值。
还可以理解,表示值可以是条目的整数表示的任意部分(包括其全部)。另外,该示例涉及四字节大小的条目。这里仅将该大小用作为示例(以下将再次使用),并且可以使用任何可适用的条目大小。还应注意,将数字(number)表示为整数仅是非限制性的示例;可以采用其他本身已知的数字表示。
注意,条目(包括引用条目和/或非引用条目)可以由整数值来表示,返回到图2,可以使用整数来表示更新包201中的替换命令。例如,“Replace int(206),int(206)”等效于“Replace 206,206”(更新包201中的一部分)。
图4示出了根据本发明一个实施例的图2的更新包的使用整数表示法的一部分。部分401是更新包201的包括替换命令的部分。注意,部分401与现有技术一致。应该注意,本示例中的任一替换命令都与两个引用条目相关联,旧版本中的一个和新版本中的一个。这两个引用条目在下文中被称为“替换对”。
本领域的技术人员可以理解,根据本发明的一个实施例,402等效于部分401,其中使用整数表示法来表示替换命令。当使用整数表示法时,每一个替换命令有两个整数与之相关联。这两个整数在下文中被称为“整数替换对”。整数替换对中的一个整数被称为“修改前整数”(表示旧版本中的条目),而第二个被称为“修改后整数”(表示新版本中的条目)。
从用于旧版本202中的显式引用条目的整数替换对,即402中的整数替换对可以看出,这些整数值反映了被引用条目的位移。例如,当条目208和208’分别引用条目209和209’时,可以看到整数替换对<int(208),int(208’)>。如果条目209最初位于地址0x9DF785,其中条目大小为四个字节,则在将条目209的内容后移五个条目(即,后移20个字节)以生成条目209’之后,该条目209’将位于地址0x9DF771。注意到该引用条目的最低有效字节包括表示该被引用条目的地址的值,则可以理解,该整数表示的引用条目208的最低有效字节为0x9DF785(即,条目208引用条目209),而引用条目208’的最低有效字节为0x9DF711(即,条目208’引用条目209’)。因此,一起构成整数替换对的这两个整数之间的差异反映了在将旧版本202更新为新版本203时进行的位移。下文中,将该差异被称为“修改差异”。修改差异由diff和修改后的整数一起来表示,例如diff(208)。
因此,可以使修改前整数或者修改后整数与修改差异相关联,而不是使整数替换对中的修改前整数与修改后整数相关联。在下文中,使得修改前整数与修改差异关联在一起的对被称为“整数位移对”。
返回到图4,403是与使用整数位移对表示法的部分401和402等效的部分。
参照图3和4进行的说明提供了用于理解本发明实施例的背景,该实施例使用了整数表示法,下文中将其称为“整数表示法实施例”。
图5示出了旧版本和新版本的更加复杂的示例(与图2所示的旧版本和新版本相比),以例示和说明该整数表示法实施例。在该附图中,对旧版本501进行更新以生成新版本502。因此,旧版本501包括在生成新版本502时被删除的块503。下文中将被删除块的大小称为size(503)。根据图2的示例可以理解,在删除了块503之后,希望将新版本中的条目后移size(503)个条目。
在旧版本中,块504位于块503之后。块504中标记了六个条目(505、506、507、508、509和510)。下文中,将条目起始的地址标记为addr(条目),例如addr(505)、addr(506)和addr(507)等。块508、509和510是显式引用条目。条目509引用条目507,而条目508、510分别引用条目511和512。注意,条目511和512是旧版本的一部分,并且位于块504之前。因此,显式引用条目508、509和510分别包括表示addr(511)、addr(507)和addr(512)的值。
在新版本502中,块504’对应于块504。如所希望的,将块504’后移size(503)。条目505’、506’、507’、508’、509’和510’分别对应于条目505、506、507、508、509和510。与块504’相似,条目505’、506’、507’、508’、509’和510’也后移了size(503)。
在块504之后,旧版本501包括标记有一个条目514的块513。条目514是引用了条目506的显式引用条目,即,引用条目514包括表示地址addr(506)的值。在新版本中,块513’对应于块513,而条目514’对应于条目514。然而,一个或更多个条目的新块515被插入到块513’中,并且在条目514’之前。即,size(513’)>size(513)。根据该示例,size(515)小于size(503),因此可以理解,条目514’后移了(size(503)-size(515))。
返回到旧版本501,在块513之后有第三块516。该块中标记有五个条目,具体地,这些条目为条目517、518、519、511和512。条目517和518是引用了条目519和505的显式引用条目,即条目517和518分别包括表示被引用条目519和505的值,换句话说,表示addr(519)和addr(505)的值。
在新版本中,块516’对应于块516。同样,条目517’、518’、519’、511’和512’分别对应于条目517、518、519、511和512。在将块515插入到块513’中之后,可以理解,块516’中的条目后移了(size(503)-size(515))个条目。
图5的示例还示出了在旧版本中存在终止块517,其与新版本中的块517’相对应。更新处理一个或更多个条目的新块520插入到块517’中。根据该示例,新块520的大小为(size(503)-size(515)),因此,新版本502的总大小与旧版本501的基本相同。
应该注意,参照图5提供的示例并不是限制性的。可以由分别包括可应用于该示例的任意数量条目的任意数量的块来构成任意内容的旧版本或新版本。类似地,当将旧版本更新为新版本时,该更新处理可以按照所需次数进行插入、删除、替换和/或执行任意所需的操作,其中条目或块的大小可以根据具体的应用而改变。
应该注意,条目的大小也是非限制性的,但是在下文中,将图5所示的内容中的条目的大小示范为4个字节。
本领域的技术人员可以理解,为了将旧版本501更新为新版本502,根据一个实施例,可以将块504以及块514的第一部分复制到新版本中,插入新块515,然后将块514的第二部分与块516和517一起复制到新版本中。然而,如已参照图2所述,通过这种方式,新版本中的显式引用条目将引用其原始地址中的条目,这与在旧版本中相同。例如,在旧版本中,显式引用条目508引用条目511,因此,条目508的最低有效字节包括表示addr(511)的值。在旧版本中,条目508位于addr(508)。在将块504复制到新版本中之后,可以理解,条目508位于addr(508’),其在本示例中位于addr(508)之后。然而,条目508仍然包括对条目511的引用,即,它包括表示addr(511)的值,在这种情况下,希望其通过包括表示addr(511’)的值来包括对条目511’的引用。因此,根据该实施例,在将内容从旧版本复制到新版本中之后,以及在插入新块(例如,块515)之后,更新包可以包括用于替换引用条目的命令,例如“在508’中,使用表示addr(511’)的值来替换表示addr(511)的值”,或者简写为“Replace 508,508’”。
在提供了整数表示法实施例的背景讨论(参照以上图3和4)和示例性旧版本和新版本(图5)之后,下面给出例示与根据现有技术获得的更新包的一部分相比,如何根据该整数表示法实施例来获得更新包的等效部分的说明。从该说明中可以显见,根据本发明该实施例获得的该部分可以比根据现有技术中的已知方法获得的小很多。
现在转到图6,部分601包含用于对图5所示的显式引用条目进行更新的替换指令。应该注意,部分601是通过对图5的旧版本和新版本应用传统的diff方法而生成的。还应该注意,部分601是用于将旧版本501更新为新版本502的完全更新包的一部分(该完全更新包未示出)。该部分仅包括替换命令,而省略了其他命令,例如插入和/或删除。应该注意,在图5的示例中有六个引用条目,因此在部分601中有六个替换命令。部分602是601的等效部分,被表示为整数替换对的形式,其中根据图3和4的说明,可以理解,对于引用条目,术语“int(条目)”反映了其引用的地址。
参照图4进一步说明了,可以将替换命令表示为整数位移对的形式,而不是使用整数替换对的表示法。即,可以对包含在其中的引用进行修改,而不用考虑与其一起存储的其他信息(例如op码),以反映出被引用条目的位置的位移,而不是对引用条目进行替换。
从图5中可以得到,该示例中的某些条目的修改差异为size(503),而其他条目的特征在于修改差异为(size(503)-size(515))。因此,可以改变部分602,而不是使用替换命令,如603中所示,可以使用修改命令,该修改命令使用修改前整数位移对表示法。
应该注意,整数位移对中的修改差异表示被引用条目的位移,而不是引用条目的位移。
604中示出了该更新包的相同部分,其中根据修改差异对修改命令进行排序。应该注意,经排序的部分604包括两个组。一个组包括用于修改int(509)、int(514)和int(518)的命令,其中修改差异为size(503)。第二组包括用于修改int(508)、int(510)和int(517)的命令,其中修改差异为(size(503)-size(515))。
应该注意,整数或其部分表示被引用条目的地址。还应该考虑到,在对引用条目进行更新时,需要对引用进行修改,而无需考虑op码或者与其相关联的其他信息。因此,在整数位移对中,可以引用表示被引用条目的值,或者引用“ind(被引用条目)”,而不是引用整数。下文中,将一对ind(被引用条目)及其相关联的修改差异称为“表示位移对”。
应该注意,尽管图5和6中未示出,但是经常存在引用同一被引用条目的一个以上的引用条目。如果被引用条目的表示值是引用条目的整数表示的一部分,则通常可以由类似的表示值来表示所有这些引用条目。如果将整个整数用作被引用条目的表示值,则可能存在表示该引用条目的一个以上的表示值。
例如,被引用条目的地址为0x5F8B23。四个引用条目通过指定其地址来引用该条目。第一个具有op码0xA2,第二个具有op码0x0F,而第三个具有op码0x1B。第四个引用条目具有与第一个相同的op码(即,0xA2)。如果由三个最低有效字节来表示该表示值,则所有四个引用条目将被表示为ind(0x5F8B23)。相反,当将整个整数用作表示值时,将存在表示这四个引用条目的三个不同的表示值。第一和第四个引用条目将被表示为ind(0xA25F8B23),第二个引用条目将被表示为ind(0x0F5F8B23),而第三个引用条目将被表示为ind(0x1B5F8B23)。
返回到图6,在605中,使用表示位移对表示法示出了与604等效的排序部分。605示出了在使引用块504中的条目的引用条目位移时,应该对其中的表示值进行修改,以反映size(503)的位移。在使引用块516中的条目的引用条目位移时,应该对其中的表示值进行修改,以反映(size(503)-size(515))的位移。
考虑到605中也存在这两个组,可以根据ind(被引用条目)在内部对每个组进行排序,由此生成606。可以生成一个复合修改命令来对表示块504中的条目的所有值进行更新,以反映size(503)的位移,而不是生成用于对具有表示块504中的条目的值的引用条目进行修改的三个修改命令。换句话说,如果引用条目包括表示505到507之间(包括505和507)的条目的值,则应该对该值进行修改以反映size(503)的位移。同样,可以生成一个复合修改命令来对表示块516中的条目的所有值进行更新,以反映(size(503)-size(515))的位移,而不是生成用于对具有表示块516中的条目的值的引用条目进行修改的三个修改命令。换句话说,如果引用条目包括表示511到519之间(包括511和519)的条目的值,则应该对该值进行修改,以反映(size(503)-size(515))的位移,如607中所示。下文中,将复合修改命令称为整数位移规则。即,607表示为了对图5的示例中的显式引用条目进行更新,可以应用的两个整数位移规则。
因此,可以理解,使用整数位移规则的部分607与使用替换命令的部分601等效。然而,部分607仅包括两个整数位移规则,而不是包括在601中的六个替换命令。因此,包括部分607的更新包与包括部分601的更新包等效。如果存储整数位移规则所需的空间小于存储其等效替换命令所需的空间,则可以通过使用该等效的整数位移规则来减小更新包的大小。
更新包大小的减小可以是显著的。例如,考虑对移动电话上的软件版本进行更新的非限制性应用,整数位移规则常常可以节省甚至几万条替换命令。
还应该注意,除了使用整数位移规则以外,还可以采用任意的数字位移规则,因此,下文中,使用术语“数字位移规则”。
图7是根据本发明一个实施例,对更新包中的数字位移规则的生成进行详细说明的流程图。应该理解,为了创建更新包和数字位移规则,应该在旧版本与新版本之间使用diff(701,在本身已知的任意方法中),以检测两个版本之间的差异。目前有许多用于检测版本之间的差异的可用工具,例如UNIX diff程序。该diff生成旧版本与新版本之间的多对差异,该多对差异中可以有替换对。如果该diff包括替换对(702),则将它们中的至少某些组合在一起(703),以形成该diff的一部分,由此例如创建与图6的部分601相似的部分。接下来(704),如前面参照图4和6所例示的(参见其中的402和602),使用整数表示法对这些替换对进行转换,以成形整数替换对。
在将替换对转换为整数替换对之后,通过将修改前整数及其修改差异关联在一起(前面参照图4(403)和6(603)所例示的阶段),来将这些整数替换对转换(705)为整数位移对。根据如图6的块604中所示的修改差异对整数位移对进行排序(706)。
在排序之后,使用各个被引用条目的表示值来替换(707)这些整数位移对中的修改前整数,以形成表示位移对(前面参照图6(605)所例示的阶段)。应该注意,在这些情况下,当存在具有相同修改差异的多个表示位移对(708)时,根据其表示值对这些表示位移对进行排序(709)。在这些情况下,当将整个整数视为被引用条目的表示值时,可以理解,块707是冗余的,并且可以跳过,而在规则的整个生成处理中使用int值而不是ind。图6的块606是本附图中的块709的示例。
如果存在包括一个以上的具有相同修改差异的表示位移对的多个组,则可以对组中的表示位移对进行组合(710),以形成数字位移规则,该数字位移规则表示该组中的第一个和最后一个被引用条目的表示值以及表示它们的特征的修改差异,如前面参照图6(参见607)所例示的。
注意,经常可以采用进一步的优化。例如,如果存在两个具有相同修改差异的数字位移规则,其中第一规则的最后一个被引用条目的表示值和第二规则的第一个被引用条目的表示值足够接近,则可以对这两个规则进行组合,以形成一个组合数字位移规则。该组合数字位移规则表示第一数字位移规则的第一个被引用条目的表示值和第二数字位移规则的最后一个被引用条目的表示值,以及表示它们的特征的修改差异。应该注意,在对两个非调整(non-adjusting)数字位移规则进行组合时,它们之间的数字位移规则(或者表示位移对)由于该组合规则而被取消,因此它们的修改前引用条目容易被错误地更新(即,它们可能被更新而反映出错误的位移)。
应该注意,本发明并不限于如图7所描述的特定操作顺序以及获得整数位移规则的方式,或者图6的部分607中所使用的整数位移规则术语。
另外,到目前为止所述的实施例通过使用数字位移规则而减小了更新包的大小,由此生成紧凑更新包。注意,在使用不同术语(例如“增量”或者“差异”或“diff”)来描述更新包的这些情况下,紧凑更新包例如可以被称为“紧凑差异结果”。
根据一不同的实施例,内容常常可以伴随有相关描述性数据(下文称为“元数据”)。提供元数据的一般形式为用于描述计算机程序的符号表、调试表和目标代码连接器映像。然而,元数据并不限于计算机程序,其他类型的内容也可以具有元数据。还应该注意,例如可以通过将相关元数据存储在不同的文件中或者通过将相关元数据存储在数据库中,来将该相关元数据与内容相分离。另选地,如可适用于该示例的,可以将元数据存储为内容的一部分。
图8示出了示例性内容和相关元数据。内容801包括802、803、804和805四个块。块803开始于地址addr(803),块804开始于地址addr(804),而块805开始于地址addr(805)。相关元数据806描述了该内容及其块,其中对于各个块,元数据806提供了起始地址和块的长度。然而,应该注意,这是非限制性的示例,并且元数据可以包括其他数据而不是各个块的起始地址和长度。
当生成用于将内容的旧版本更新为其新版本的更新包时,如果元数据与该内容相关联,则可以使用元数据来对引用的修改进行编码,如以下参照图9和10所述。
图8的示例和说明将作为理解如何获得根据本发明另一实施例的所谓的“引用位移规则”的基础,如以下将参照图9和图9A的进一步详细说明,图9是旧版本901以及通过其更新而获得的新版本902的示意图,而图9A是根据本发明一个实施例的与图9的旧版本和新版本相关联的元数据和差异表(分别为9A01、9A02和9A03)。
旧版本901包括四个块(905、906、907、908),它们各自的起始地址为addr(905)、addr(906)、addr(907)和addr(908)。在新版本中,将至少一个条目的新块909添加到块905中,由此生成对应的块905’。可以理解,块905’的大小因此比块905的大小大了size(909)。另外,如果在更新处理中没有再出现向该内容中插入另外的条目,或者从该内容中删除条目,则预期新块909前面的条目前移size(909)。
在块905’前面的块906’对应于块906,块907’对应于块907,而块908’对应于块908。还在块907’中插入了一个或更多个条目的新块910。该新块的大小为size(910)。因此,新条目910前面的条目前移了(size(909)+size(910))。
在旧版本中,块906包括至少三个显式引用条目911、912和913,其相对应地引用了条目914、915和916。被引用条目914在块908中,被引用条目915在块907中,而被引用条目916在块906中。另外,块908包括对条目918进行引用的至少一个显式引用条目917。与被引用条目915相同,被引用条目918也在块907中。
与旧版本901相关联的元数据9A01对这四个块、其各自的起始地址以及其长度进行了描述。与新版本902相关联的元数据9A02对其中所包括的块进行了描述。通过比较元数据9A01和元数据9A02,可以知道,该示例中的块905’的起始地址与旧版本的块905的相同。然而,块906,的起始地址等于(addr(906)+size(909))。同样,当与旧版本的块907的起始地址进行比较时,块907的起始地址也反映出size(909)的位移,即addr(907’)=addr(907)+size(909)。另一方面,块908’的起始地址表示了(size(909)+size(910))的位移,即,addr(908’)=addr(908)+size(909)+size(910)。
尽管以下将根据图9的特定示例来说明如何获得引用位移规则,但是顺便提及,应该注意,图9、9A和10的示例是非限制性的。旧版本和新版本可以具有任意可适用的数量的块,在将旧版本更新为新版本时,可以在任意位置处插入新块和条目,或者将其删除。还应该理解,可以通过使用旧版本中的地址来表示新版本的元数据9A02,并且在可适用时加上所插入块的大小。将结果和修改差异(即,表示旧版本中的各个块及其在新版本中的对应块的起始地址的特征的位移)一起称为“差异表”。1000(参见图10)中示出了该差异表,其为与元数据9A01和9A02相对应的差异表。
可以理解,可以根据差异表1000来生成引用位移规则。例如,如果引用条目引用了块906’中的另一条目,并且遵循差异表中的信息,则可以理解,在新版本中,应该对其对应的引用条目进行修改,以在被引用条目位置中反映出size(909)的位移。同样,如果第二引用条目引用了块908’中的另一条目,则可以理解,在新版本中,应该对其对应的引用条目进行修改,以在被引用条目位置中反映出size(909)+size(910)的位移。
总的来说,差异表由此反映了引用位移规则。例如,对于块906’中的各个被引用条目,特征位移是size(909)。同样,对于块907’中的各个被引用条目,特征位移也是size(909),而对于块908’中的各个被引用条目,特征位移是size(909)+size(910)。
可以根据差异表中所示的块的起始地址和长度来确定引用条目是否引用了特定块中的另一条目。因此,引用位移规则可以由示例性表示法“Modify<addr(被引用块),size(被引用块)>,位移”来表示。
在图9A的示例中,可以看出块906’和907’都以相同的位移为特征。因为块906’和907’是连续的,所以可以理解,可以对它们的两个引用位移规则进行组合,以形成表示“Modify<addr(906’),size(906’)+size(907’)>,size(909)”的一个引用位移规则。
在图10中,块1001例示了基于差异表1000的引用位移规则。在该示例中,示出了三个引用位移规则(1002、1003和1004)。
然而,如本身已知的,元数据经常不对内容的一个或更多个块进行描述。例如,参见图9和图11。在图11中示出了图9的旧版本901的元数据1101和图9的新版本902的元数据1102。应该注意,元数据1101和1102是部分的,即,没有描述块907及其对应的块907’。因此可以理解,在图12的差异表1201中,也没有对块907’的差异进行描述。这影响了1202中所示的引用位移规则的生成。与图9和10的先前示例相同,在当前示例中,也存在三个引用位移规则1203、1204和1205。然而,因为没有对块907’进行描述,所以第二规则1204对应于与先前示例的第二规则1003相比更小的块。因此,在这种情况下,不能根据引用位移规则对引用了块907’中的另一条目的引用条目进行修改。
然而,通过以上参照图5、6和7对数字位移规则的说明,本领域的技术人员可以理解,可以在引用位移规则不适用的情况下尝试并应用数字位移规则。应该注意,利用数字位移规则的方法不需要元数据,因此在这种情况下利用数字位移规则是适用的。
图13是根据本发明一个实施例的对更新包中的引用位移规则的生成进行详细说明的流程图。在接收到旧版本和新版本各自的元数据(1301)之后,创建差异表(例如图10的差异表1000)(1302)。该差异表至少包括与旧版本中的块有关的信息(例如其起始地址),该信息与和新版本中其各自的对应块有关的信息(例如其起始地址)相关联。另选地,该差异表至少可以包括与旧版本中的块有关的信息,该信息与和其各自的修改差异(即,其位移值)有关的信息相关联。应该注意,其他另选方案也是允许的,例如至少包括与新版本中的块有关的信息,该信息与和其各自的修改差异有关的信息相关联。
对于该差异表中描述的各个块,生成引用位移规则(1304)。接下来,对涉及相邻块的引用位移规则进行组合。应该注意,本发明并不限于图13中所描述的特定操作顺序以及获得引用位移规则的方式。
还应该注意,用于描述引用位移规则的表示法是非限制性的,也可以采用其他表示法。例如,可以指定由该规则所覆盖的块或多个块(换句话说,“区段”)中的第一个条目和最后一个条目,而不是指定该区段的第一个条目和长度。注意,后者也应用于参照图7所述的数字位移规则,已作必要修正。
以上描述对用于在将旧版本更新为新版本的过程中,生成数字和引用位移规则以更新引用条目中的引用的实施例进行了说明。应该注意,本发明并不限于上述特定的数字位移规则和引用位移规则。更普遍地,术语“位移规则”是指对引用条目进行更新,以在新版本中反映引用条目的位移。
下文中,“转换元素”是用于指代与更新包相关联的位移规则的集合的术语。即,转换元素可以包括至少一个数字位移规则,和/或至少一个引用位移规则,以及/或者在将旧版本更新为新版本时可以采用的任意其他位移规则。因此,根据以上说明,本领域的技术人员可以理解,包含至少一个转换元素的更新包是紧凑更新包。
在对旧版本应用转换元素时,应该理解,引用条目可能经常被错误地更新。例如,考虑图9所示的示例,其中所插入的条目910被插入到块907中,并且在条目915’的后面。该示例中的这种变化不会影响差异表1000,并且引用位移规则将与图10(参见1001)中所述的类似。然而,可以理解,条目915’和918’前移了(size(909)+size(910)),而不是如差异表1000所预测的size(909)。因此,与1001的引用位移规则所表示的不同,应该对引用条目912’和917’进行修改,以反映出(size(909)+size(910))而不是size(909)的位移。
根据下文中被称为本发明的“一个改进”实施例的本发明的实施例,可以应用转换元素,该转换元素包括图10的1001的引用位移规则,通过该引用位移规则生成经修改的版本,然后通过在经修改的版本与新版本之间应用diff应用程序(utility),来提供对于受到该转换元素影响的错误引用条目的矫正。该diff程序常常被简称为“diff”,经修改的版本与新版本之间的比较在下文中被称为“经修改的diff”,其中用于生成转换元素的第一diff(旧版本和新版本之间的比较)在下文中被称为“完全diff”。将完全diff的输出称为“完全增量”,而将经修改的diff的输出称为“修改增量”。
总的来说,可以理解,完全diff对旧版本与新版本之间存在的所有变化进行检测,例如包括替换对(即,如上所述的经位移的显式引用条目)和诸如插入条目和删除条目的其他变化,而经修改的diff实际上对较少的替换和可能的错误替换对以及其他变化进行检测。因此,与完全增量相比,修改增量的大小更小。
然而,修改增量和转换元素可以一起构成可以对旧版本进行更新并生成其新版本的更新包。与包括完全增量而不包括转换元素的“简单更新包”不同,下文中将由至少一个转换元素和修改增量构成的这种输出包称为“复合更新包”。注意,与其等效替换命令相比,转换元素的大小可以更小,所得到的复合更新包的大小通常比本身已知的简单更新包更小。因此,下文中将复合更新包视为紧凑更新包。根据本发明的实施例,紧凑更新包至少包括转换元素和与其相关联的修改增量。
可以理解,通过在紧凑更新包中采用转换元素以及与其相关联的经修改的diff(“前向转换顺序”或者换句话说,“前向更新指示符”),可以生成新版本,其中由修改增量来替换被转换元素错误修改的条目,并通过获得其新版本中的正确内容的方式对其进行修改(以下将详细讨论应用更新包的过程)。然而,应该注意,通常应该在下文中被称为“后向转换顺序”的转换元素之前应用经修改的diff。以下将详细说明后向转换顺序。
然而,可以说明,可以从修改增量中提取另外的转换元素,而不是将修改增量与转换元素进行组合来形成紧凑更新包,以有助于先前的转换元素或者生成要与先前的转换元素和增量关联在一起的另外的转换元素,以形成更小的紧凑更新包。因此,下面参照图14对被称为“迭代实施例”的本发明的另一实施例进行说明。
图14是根据本发明的迭代实施例的用于更新内容的版本的迭代的示例性示意图。版本1401是旧版本,而版本1402是新版本。该附图示出了根据本发明的迭代实施例的用于将旧版本1401更新为新版本1402的紧凑更新包的生成。旧版本1401包括块1403。除了块1403以外,还有另一个块1404,其至少包括一些显式引用条目1405、1406、1407、1408、1409、1410、1411、1412、1413和1414。块1404还包括非引用条目1415。
在新版本1402中,块1403’和1404’与块1403和1404相对应,而条目1405’、1406’、1407’、1408’、1409’、1410’、1411’、1412’、1413’、1414’和1415’分别与条目1406、1407、1408、1409、1410、1411、1412、1413、1414和1415相对应。将至少一个条目1416插入到块1403’中,由此使其大小增大size(1416),并且将至少一个大小为size(1417)的条目1417插入到块1404’中、条目1405’之后。
应该注意,引用条目1405、1411和1414的内容基本相同,因此对应的引用条目1405’、1411’和1414’的内容也基本相同。类似地,1406、1412和1414的内容基本相同,因此对应的引用条目1406’、1412’和1414’的内容也基本相同。
条目1405’、1406’、…、1410’为显式引用条目,与旧版本相比,在新版本中对其内容进行了修改(即,它们的被引用条目发生了位移)。还对显式引用条目1411’、1412’、1413’和1414’进行相同的操作。然而,原本已知的diff应用程序不能识别出条目1417为插入到新版本1402中的新条目,而条目1405’、1406’、…、1410’、…为经位移的条目,因此,该diff应用程序错误地检测为条目1417替换了条目1405。此外,该diff应用程序识别出条目1415’与条目1415相同(因此为其副本),并且进行同步而检测(这一次是正确的)为条目1411’替换了条目1411等等。
因此,根据完全diff而生成了完全增量,其(部分错误地)表示如下:
1417替换1405;
1405’替换1406;
1406’替换1407;
1407’替换1408;
1408’替换1409;
1409’替换1410;
1415’是1415的副本;
1411’替换1411;
1412’替换1412;
1413’替换1413;以及
1414’替换1414。
例如,根据以上图7和13中所示的方法,基于该完全增量而生成转换元素。
注意,条目1405、1411和1414基本相同(其对应的条目也这样),并且条目1406、1412和1414基本相同(其对应的条目也这样),并且在检测到1411’替换了1411以及1413’替换了1413时,转换元素可以估计出1405应该被1405’替换。类似地,通过检测到1412’替换了1412以及1414’替换了1414,转换元素可以估计出1406应该被1406’替换。
将该转换元素应用于旧版本1401,从而生成经修改的版本1418。应该注意,转换元素修改(或转换)了旧版本中的多个条目,但是其没有进行诸如删除和/或插入条目的任何其他改变。因此,经修改的版本1418相对于旧版本1401没有进行位移。
根据本发明的一个改进实施例,可以使用经修改的diff,以在经修改的版本1418与新版本1402之间进行比较。所得到的修改增量将识别出附加元素的插入、其他元素的删除以及其余元素的替换(其中有未经过转换元素处理的条目1407、1408、1409和1410)。该修改增量与转换元素一起作为生成紧凑更新包的基础。
另选地,根据本发明的迭代实施例,例如根据以上图7和13所示的方法,该修改增量应该作为用于生成另外的新转换元素的基础,而不是生成紧凑更新包。该新转换元素与在先前的迭代中生成的转换元素一起构成复合转换元素。可以将该新转换元素应用于经修改的版本1418,以生成要通过经修改的diff与新版本1402进行比较的另一经修改的版本(未示出),等等。停止迭代的一个示例性终止条件为,通过迭代生成的修改增量的大小与新转换元素的大小之和大于或等于先前的修改增量的大小与先前的复合转换元素的大小之和。当迭代停止时,根据该复合转换元素和修改增量来生成紧凑更新包。
尽管以下将参照图15的流程图以概要的方式对迭代实施例进行说明,但是顺便提及,应该注意,图14的示例是非限制性的。旧版本和新版本可以具有任意可适用数量的块,在将旧版本更新为新版本时,可以将新块和条目插入在任意位置,或者将其删除,可以执行任意次数的迭代,并且可以使用任意可适用的终止条件(或“停止标准”)来停止迭代。即,如果不满足停止标准,则该处理进行到下一次迭代。
图15是对本发明的迭代实施例进行详细说明的流程图。注意,根据该流程图生成的更新包为前向转换顺序。
在开始时,所述方法接收待更新的内容的至少旧版本和新版本,并且如果有的话,还接收元数据。这两个版本和元数据用作生成(1501)转换元素以及确定(1502)初始增量大小的基础,其中可以理解,该复合转换元素与在1501中生成的转换元素最初是相同的(1503)。将该转换元素应用于(1504)旧版本,由此生成经修改的版本。接下来,在对经修改的版本和新版本应用经修改的diff时,生成(1505)修改增量,并且该修改增量用作生成(1506)新转换元素的基础。确定(1507)该新转换元素的大小。
将该新转换元素并入(1508)到复合转换元素中。确定新转换元素的大小(1509)以及修改增量的大小(1510)。
如果复合转换元素的大小与增量大小之和小于新转换元素的大小与修改增量的大小之和(1511),则该新转换元素变为转换元素(1512),该增量大小变为新增量大小(1513),并且将该新转换元素应用于经修改的版本(1514),由此生成新的经修改的版本。返回到1505,创建新的修改增量。
然而,如果在1511中确定转换元素的大小与修改增量大小之和等于或大于复合转换元素的大小与增量大小之和,则根据复合转换元素和修改增量来生成更新包(1515)。另选地,在1511,如果紧凑更新包大于在先前的迭代中生成的紧凑更新包,则满足停止标准。
应该理解,也可以按照后向转换顺序来执行该迭代实施例,即,在旧版本和新版之间应用完全diff,以生成初始转换元素,其中通过对新版本应用转换元素来创建经修改的版本。接下来,在旧版本和经修改的版本之间生成修改增量,以生成新转换元素,等等。
对更新包进行标记,以表示生成了符合该更新包的转换顺序。
应该注意,本发明并不限于图15中所述的特定操作顺序以及生成更新包的方式。
已根据本发明的多种非限制性实施例对更新包的生成进行了说明,下面对使用更新包来更新旧版本以生成新版本进行说明。通过非限制性示例的方式,通过无线通信介质来传输更新包,并由移动电话装置进行接收。该移动电话装置包括处理器,其被构造用来对所接收的更新包进行处理,并对存储在其中的程序和/或数据的旧版本进行更新,以生成存储在移动电话装置中并且可以在移动电话装置中运行的新版本。
注意,关注图16,其示出了根据本发明一个实施例,对内容的旧版本进行更新以生成内容的新版本的流程图。根据本实施例的更新包包括转换元素和修改增量。应该注意,更新包包括前向更新指示符或者后向更新指示符。
在获得紧凑更新包(1601)之后,提取包含在其中的转换元素(1602)。
如果更新包包括前向更新指示符,如在1603所检测到的,则对旧版本应用转换元素(1604),由此生成经修改的版本。然后从该更新包中提取(1605)修改增量并将其应用于(1606)经修改的版本。另一方面,如果在1603和1607中发现该更新包包括后向更新指示符,则首先提取(1605)修改增量并将其应用于(1606)旧版本,以生成经修改的版本,然后对该经修改的版本应用(1608)转换元素。在两种情况下,结果都是新版本。
图17示出了根据本发明一个实施例的用于生成内容的旧版本和内容的新版本之间的紧凑更新包的系统1701。该系统包括:转换元素生成器1702,用于生成与旧版本和新版本相关联的转换元素;经修改版本生成器1703,用于生成经修改的版本,包括对旧版本应用转换元素;更新包生成器1704,用于生成紧凑更新包。该紧凑更新包包括转换元素和基于经修改的版本以及新版本的修改增量。
图18示出了根据本发明一个实施例的用于对内容的旧版本进行更新以生成内容的新版本的系统1801。该系统包括输入模块1802和处理器1803。该输入模块被构造用来获得紧凑更新包,该紧凑更新包包括与所述旧版本和新版本相关联的转换元素、修改增量,以及前向更新或后向更新的指示。在前向更新指示的情况下,该处理器被构造用来生成经修改的版本,包括对旧版本应用该转换元素。该处理器还被构造用来生成新版本,包括对经修改的版本应用该修改增量。在后向更新指示的情况下,该处理器被构造用来生成经修改的版本,包括对旧版本应用该修改增量。该处理器还被构造用来生成新版本,包括对经修改的版本应用该转换元素。
还可以理解,根据本发明的系统可以是经适当编程的计算机。同样,本发明意在一种计算机可读的计算机程序,用于执行本发明的方法。本发明还意在一种机器可读的存储器,其实际上包含有可由该机器执行的指令程序,用于执行本发明的方法。
以特定的具体程度对本发明进行了说明,但是本领域的技术人员很容易理解,在不脱离以下权利要求的范围的情况下,可以进行多种替换和修改。
Claims (39)
1、一种用于生成紧凑更新包的方法,所述紧凑更新包用于将内容的旧版本更新为内容的新版本,该方法包括:
(i)根据所述旧版本和新版本间差异的结果生成转换元素;
(ii)从所述旧版本和新版本中选择一选择版本;
(iii)生成经修改的版本,该生成包括对所述选择版本应用所述转换元素;
(iv)根据所述经修改的版本获得修改增量并且从所述旧版本和新版本中获得第二版本,所述第二版本与所述选择版本不同;以及
(v)生成所述紧凑更新包,该紧凑更新包包括所述转换元素以及所述修改增量。
2、根据权利要求1所述的方法,其中所述修改增量是通过在所述经修改的版本和所述第二版本之间应用差异应用程序而获得的。
3、根据权利要求1所述的方法,还包括:
vi)提供所述紧凑更新包。
4、根据权利要求1所述的方法,其中,所述选择版本是内容的旧版本,并且所述第二版本是内容的新版本。
5、根据权利要求1所述的方法,其中,所述选择版本是内容的新版本,并且所述第二版本是内容的旧版本。
6、根据权利要求1所述的方法,其中所述转换元素包括至少一个位移规则。
7、根据权利要求6所述的方法,其中所述位移规则为数字位移规则。
8、根据权利要求7所述的方法,其中所述数字位移规则为整数位移规则。
9、根据权利要求6所述的方法,其中所述位移规则是引用位移规则。
10、根据权利要求1所述的方法,其中所述内容包括计算机程序。
11、根据权利要求10所述的方法,其中所述程序是可执行程序。
12、根据权利要求1所述的方法,其中所述内容包括数据。
13、根据权利要求1所述的方法,还包括应用于迭代,所述迭代包括:
a)生成与在先前的迭代中获得的经修改的版本以及所述第二版本相关联的转换元素;
b)生成经修改的版本,该生成包括对在先前的迭代中获得的经修改的版本应用在(a)中获得的转换元素;
c)生成紧凑更新包;该紧凑更新包包括复合转换元素,以及基于至少在(b)中规定的经修改的版本和所述第二版本的修改增量,其中该复合转换元素包括在到目前为止的所有迭代中生成的转换元素;
d)如果不满足停止标准,则进行下一次迭代;否则,从(v)和所述迭代过程中生成的紧凑更新包当中选择最小的紧凑更新包。
14、根据权利要求13所述的方法,其中如果紧凑更新包比在先前的迭代中生成的紧凑更新包更大,则满足所述停止标准。
15、根据权利要求1所述的方法,用于对存储在存储装置中的内容进行更新。
16、根据权利要求15所述的方法,其中所述存储装置与嵌入装置相关联。
17、根据权利要求16所述的方法,其中所述嵌入装置是包括移动电话、消费者电子装置的组中的成员。
18、根据权利要求15所述的方法,其中所述存储装置与计算机相关联。
19、一种用于对内容的旧版本进行更新以生成内容的新版本的方法,该方法包括:
(i)获得紧凑更新包;所述紧凑更新包包括:与所述旧版本和新版本相关联的转换元素;修改增量;以及前向更新或后向更新的指示;
(ii)生成经修改的版本,该生成包括在前向更新指示的情况下对所述旧版本应用所述转换元素或者在后向更新指示的情况下对所述旧版本应用所述修改增量;
(iii)生成所述新版本,该生成包括在前向更新指示的情况下对所述经修改的版本应用所述修改增量或者在后向更新指示的情况下对在所述经修改的版本应用所述转换元素。
20、根据权利要求19所述的方法,其中所述转换元素是复合转换元素。
21、根据权利要求19所述的方法,其中所述(i)包括:
接收所述紧凑更新包。
22、根据权利要求19所述的方法,其中所述转换元素包括至少一个位移规则。
23、根据权利要求22所述的方法,其中所述位移规则为数字位移规则。
24、根据权利要求23所述的方法,其中所述数字位移规则为整数位移规则。
25、根据权利要求22所述的方法,其中所述位移规则是引用位移规则。
26、根据权利要求19所述的方法,其中所述内容包括计算机程序。
27、根据权利要求26所述的方法,其中所述程序是可执行程序。
28、根据权利要求19所述的方法,其中所述内容包括数据。
29、根据权利要求19所述的方法,用于对存储在存储装置中的内容进行更新。
30、根据权利要求29所述的方法,其中所述存储装置与嵌入装置相关联。
31、根据权利要求30所述的方法,其中所述嵌入装置是包括移动电话、消费者电子装置的组中的成员。
32、根据权利要求29所述的方法,其中所述存储装置与计算机相关联。
33、一种用于生成更新包的方法,该更新包用于将所述内容的旧版本更新为其新版本,该方法包括:
确定表示所述旧版本的引用条目中的被引用条目的地址的值;
对所述旧版本中的被引用条目确定修改位移;
设定整数位移规则,以使得能够根据所述修改位移对所述引用条目进行修改;以及
将所述整数位移规则结合在转换元素中,所述转换元素是所述更新包的一部分。
34、一种嵌入在计算机电路和计算机可读介质至少之一的系统,用于生成紧凑更新包,所述紧凑更新包用于将内容的旧版本更新为内容的新版本,该系统包括:
版本选择器,用于从所述旧版本和新版本中选择一选择版本;
转换元素生成器,用于根据所述旧版本和新版本间差异的结果生成转换元素;
经修改版本生成器,用于生成经修改的版本,该生成包括对所述选择版本应用所述转换元素;
修改增量获得单元,用于根据所述经修改的版本获得修改增量并且从所述旧版本和新版本中获得第二版本,所述第二版本与所述选择版本不同;以及
更新包生成器,用于生成所述紧凑更新包,该紧凑更新包包括所述转换元素以及所述修改增量。
35、一种对内容的旧版本进行更新以生成内容的新版本的系统,该系统包括:
输入模块,被构造用来获得紧凑更新包;所述紧凑更新包包括:与所述旧版本和新版本相关联的转换元素;修改增量;以及前向更新或后向更新的指示;
用于生成经修改的版本的装置,该生成包括在前向更新指示的情况下对所述旧版本应用所述转换元素或者在后向更新指示的情况下对所述旧版本应用所述修改增量;以及
用于生成所述新版本的装置,该生成包括在前向更新指示的情况下对所述经修改的版本应用所述修改增量或者在后向更新指示的情况下对在所述经修改的版本应用所述转换元素。
36、根据权利要求35所述的系统,用于对存储在存储装置中的内容进行更新。
37、根据权利要求36所述的系统,其中所述存储装置与嵌入装置相关联。
38、根据权利要求37所述的系统,其中所述嵌入装置是包括移动电话、消费者电子装置的组中的成员。
39、根据权利要求36所述的系统,其中所述存储装置与计算机相关联。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US48022503P | 2003-06-23 | 2003-06-23 | |
US60/480,225 | 2003-06-23 | ||
US60/546,163 | 2004-02-23 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1826585A CN1826585A (zh) | 2006-08-30 |
CN100517220C true CN100517220C (zh) | 2009-07-22 |
Family
ID=37532924
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004800213727A Expired - Lifetime CN100517220C (zh) | 2003-06-23 | 2004-06-23 | 对存储在存储装置中的内容的版本进行更新的方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100517220C (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101594355B (zh) * | 2009-06-17 | 2012-11-07 | 华为技术有限公司 | 一种实现软件跨版本交互的方法及装置 |
CN103428188A (zh) * | 2012-05-25 | 2013-12-04 | 北京小米科技有限责任公司 | 一种文件更新方法、装置及相关设备 |
EP2881903A1 (en) * | 2013-12-03 | 2015-06-10 | Siemens Aktiengesellschaft | Managing design updates in a manufacturing execution system |
CN106210039A (zh) * | 2016-07-08 | 2016-12-07 | 乐视控股(北京)有限公司 | 对象管理方法、客户端和云服务端 |
-
2004
- 2004-06-23 CN CNB2004800213727A patent/CN100517220C/zh not_active Expired - Lifetime
Non-Patent Citations (2)
Title |
---|
Compressing differences of executable code. Baker B S.WCSSS‘99.ACM SIGPLAN WORKSHOP ON COMPILER SUPPORT FOR SYSTEM SOFTWARE. 1999 |
Compressing differences of executable code. Baker B S.WCSSS‘99.ACM SIGPLAN WORKSHOP ON COMPILER SUPPORT FOR SYSTEM SOFTWARE. 1999 * |
Also Published As
Publication number | Publication date |
---|---|
CN1826585A (zh) | 2006-08-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8341113B2 (en) | Method and system for updating versions of content stored in a storage device | |
US7676479B2 (en) | Method and system for updating versions of content stored in a storage device | |
CN100472475C (zh) | 用于更新电子文件的系统及其中的方法 | |
US7739679B2 (en) | Object ordering tool for facilitating generation of firmware update friendly binary image | |
US7555750B1 (en) | Update package generator employing partial predictive mapping techniques for generating update packages for mobile handsets | |
US7310801B2 (en) | Servicing a component-based software product throughout the software product lifecycle | |
CN107506219A (zh) | 一种基于Android系统的通用版本升级方法 | |
EP1084469B1 (en) | Patching rebased and realigned executable files | |
CN100481080C (zh) | 一种浏览器本地页面的存储和更新方法 | |
EP1548587A2 (en) | Self-describing software image update components | |
US20070050762A1 (en) | Build optimizer tool for efficient management of software builds for mobile devices | |
KR20050065642A (ko) | 데이터 갱신 시스템, 데이터 갱신 시스템의 차분 데이터생성장치 및 프로그램, 및 갱신 후 파일 복원장치 및프로그램 | |
CN105589725A (zh) | 一种电子设备的升级包制作方法和升级方法、升级包 | |
CN104267978A (zh) | 一种生成差分包的方法及装置 | |
CN101882094A (zh) | 嵌入式系统制作补丁的方法和系统 | |
CN100517220C (zh) | 对存储在存储装置中的内容的版本进行更新的方法和系统 | |
CN105512039A (zh) | 一种软件测试申请单的生成方法和装置 | |
JP2011059918A (ja) | バージョン管理装置及びバージョン管理方法 | |
JP3792232B2 (ja) | 情報処理装置及び格納位置管理方法及びプログラム | |
JP2001202234A (ja) | ダウンロード方式 | |
CN106528183B (zh) | 一种创建控件的方法、装置和计算机程序 | |
CN117331573A (zh) | 一种可自举的轻量级软件包安装方法 | |
JP2718663B2 (ja) | 対話型情報検索編集方法 | |
CN112685425A (zh) | 一种数据资产元信息处理系统和方法 | |
EP1244011A1 (en) | Displaying user readable information during linking |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C56 | Change in the name or address of the patentee | ||
CP02 | Change in the address of a patent holder |
Address after: Israel Hood Harsh Ron Patentee after: Red Bend Ltd. Address before: Israeli Rosh ha'ayin Patentee before: Red Bend Ltd. |
|
CX01 | Expiry of patent term | ||
CX01 | Expiry of patent term |
Granted publication date: 20090722 |