專利名稱:對(duì)存儲(chǔ)在存儲(chǔ)裝置中的內(nèi)容的版本進(jìn)行更新的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及創(chuàng)建存儲(chǔ)在存儲(chǔ)裝置中的內(nèi)容的緊湊(compact)更新版本。
背景技術(shù):
US 6,546,552公開了一種用于生成舊程序與新程序之間的緊湊差異結(jié)果的方法。每一個(gè)程序都包括多個(gè)引用條目,這些引用條目包含引用(refer to)該程序中的其他條目的引用(reference)。該方法包括對(duì)舊程序進(jìn)行掃描的多個(gè)步驟,并針對(duì)各個(gè)引用條目執(zhí)行包括使用特有的標(biāo)簽標(biāo)記來替換該條目的引用的多個(gè)步驟,由此生成經(jīng)修改的舊程序。還提供了對(duì)新程序進(jìn)行掃描的步驟,并針對(duì)各個(gè)引用條目執(zhí)行包括使用特有的標(biāo)簽標(biāo)記來替換該條目的引用的步驟,由此生成經(jīng)修改的新程序。還提供了直接或間接地利用該經(jīng)修改的舊程序和該經(jīng)修改的新程序來生成指定的差異結(jié)果的步驟。
在該領(lǐng)域中,需要提供一種用于對(duì)存儲(chǔ)在存儲(chǔ)裝置中的內(nèi)容的版本進(jìn)行更新的新方法和系統(tǒng)。
發(fā)明內(nèi)容
本發(fā)明提供了一種用于生成內(nèi)容的舊版本與內(nèi)容的新版本之間的緊湊更新包的方法,該方法包括(i)生成與所述舊版本和新版本相關(guān)聯(lián)的轉(zhuǎn)換元素;(ii)生成經(jīng)修改的版本,該生成包括對(duì)所述舊版本和新版本中的一個(gè)版本應(yīng)用該轉(zhuǎn)換元素;(iii)生成所述緊湊更新包;該緊湊更新包包括所述轉(zhuǎn)換元素以及基于至少所述經(jīng)修改的版本和在(ii)中規(guī)定的所述一個(gè)版本以外的版本的修改增量(delta)。
本發(fā)明還提供了一種用于對(duì)內(nèi)容的舊版本進(jìn)行更新以生成內(nèi)容的新版本的方法,該方法包括(i)獲得緊湊更新包;所述緊湊更新包包括與所述舊版本和新版本相關(guān)聯(lián)的轉(zhuǎn)換元素;修改增量;以及前向更新或后向更新的指示;(ii)在前向更新指示的情況下a.生成經(jīng)修改的版本,該生成包括對(duì)所述舊版本應(yīng)用該轉(zhuǎn)換元素;以及b、生成所述新版本,該生成包括對(duì)所述經(jīng)修改的版本應(yīng)用所述修改增量,(iii)在后向更新指示的情況下a.生成經(jīng)修改的版本,該生成包括對(duì)所述舊版本應(yīng)用該修改增量;以及b.生成所述新版本,該生成包括對(duì)在(iii)(a)中規(guī)定的經(jīng)修改的版本應(yīng)用所述轉(zhuǎn)換元素。
本發(fā)明還提供了一種用于生成更新包的方法,以使得能夠?qū)Υ鎯?chǔ)在存儲(chǔ)裝置中的內(nèi)容的版本進(jìn)行更新,該更新包使得能夠?qū)⑺鰞?nèi)容的舊版本更新為其新版本,該方法包括確定表示所述舊版本的引用條目中的被引用條目的地址的值;為所述舊版本中的被引用條目確定修改位移(shift);以及設(shè)定整數(shù)位移規(guī)則,以使得能夠根據(jù)所述修改位移對(duì)所述引用條目進(jìn)行修改。
本發(fā)明還提供了一種機(jī)器可讀的程序存儲(chǔ)裝置,其實(shí)際上包含有可由該機(jī)器執(zhí)行的指令程序,以執(zhí)行用于生成內(nèi)容的舊版本與內(nèi)容的新版本之間的緊湊更新包的方法步驟,該方法步驟包括(i)生成與所述舊版本和新版本相關(guān)聯(lián)的轉(zhuǎn)換元素;(ii)生成經(jīng)修改的版本,該生成包括對(duì)所述舊版本和新版本中的一個(gè)版本應(yīng)用該轉(zhuǎn)換元素;(iii)生成所述緊湊更新包;該緊湊更新包包括所述轉(zhuǎn)換元素以及基于至少所述經(jīng)修改的版本和在(ii)中規(guī)定的所述一個(gè)版本以外的版本的修改增量。
本發(fā)明還提供了一種機(jī)器可讀的程序存儲(chǔ)裝置,其實(shí)際上包含有可由該機(jī)器執(zhí)行的指令程序,以執(zhí)行用于對(duì)內(nèi)容的舊版本進(jìn)行更新以生成內(nèi)容的新版本的方法步驟,該方法步驟包括(i)獲得緊湊更新包;所述緊湊更新包包括與所述舊版本和新版本相關(guān)聯(lián)的轉(zhuǎn)換元素;修改增量;以及前向更新或后向更新的指示;(ii)在前向更新指示的情況下a)生成經(jīng)修改的版本,該生成包括對(duì)所述舊版本應(yīng)用該轉(zhuǎn)換元素;以及b)生成所述新版本,該生成包括對(duì)所述經(jīng)修改的版本應(yīng)用所述修改增量,(iii)在后向更新指示的情況下a)生成經(jīng)修改的版本,該生成包括對(duì)所述舊版本應(yīng)用該修改增量;以及b)生成所述新版本,該生成包括對(duì)在(iii)(a)中規(guī)定的經(jīng)修改的版本應(yīng)用所述轉(zhuǎn)換元素。
本發(fā)明的另一方面提供了一種用于生成內(nèi)容的舊版本與內(nèi)容的新版本之間的緊湊更新包的系統(tǒng),該系統(tǒng)包括轉(zhuǎn)換元素生成器,用于生成與所述舊版本和新版本相關(guān)聯(lián)的轉(zhuǎn)換元素;經(jīng)修改版本生成器,用于生成經(jīng)修改的版本,該生成包括對(duì)所述舊版本和新版本中的一個(gè)版本應(yīng)用該轉(zhuǎn)換元素;更新包生成器,用于生成所述緊湊更新包;該緊湊更新包包括所述轉(zhuǎn)換元素以及基于至少所述經(jīng)修改的版本和所述一個(gè)版本以外的版本的修改增量。
本發(fā)明還提供了一種用于對(duì)內(nèi)容的舊版本進(jìn)行更新以生成內(nèi)容的新版本的系統(tǒng),該系統(tǒng)包括輸入模塊,被構(gòu)造用來獲得緊湊更新包;所述緊湊更新包包括與所述舊版本和新版本相關(guān)聯(lián)的轉(zhuǎn)換元素;修改增量;以及前向更新或后向更新的指示;處理器,被構(gòu)造用來在前向更新指示的情況下執(zhí)行a)生成經(jīng)修改的版本,該生成包括對(duì)所述舊版本應(yīng)用該轉(zhuǎn)換元素;以及b)生成所述新版本,該生成包括對(duì)所述經(jīng)修改的版本應(yīng)用所述修改增量,或者在后向更新指示的情況下執(zhí)行a)生成經(jīng)修改的版本,該生成包括對(duì)所述舊版本應(yīng)用該修改增量;以及b)生成所述新版本,該生成包括對(duì)在(iii)(a)中規(guī)定的經(jīng)修改的版本應(yīng)用所述轉(zhuǎn)換元素。
為了理解本發(fā)明并了解如何在實(shí)際中實(shí)施,現(xiàn)將參照附圖,僅以非限制性示例的方式對(duì)優(yōu)選實(shí)施例進(jìn)行說明,附圖中圖1是根據(jù)本發(fā)明一個(gè)實(shí)施例的在移動(dòng)電話網(wǎng)絡(luò)中提供版本更新的系統(tǒng)的示意圖;圖2是用于將內(nèi)容的舊版本更新為新版本的更新包的示意圖;圖3是根據(jù)本發(fā)明一個(gè)實(shí)施例的表示條目的整數(shù)值的示意圖;圖4示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的圖2的更新包的使用整數(shù)表示法(notation)的一部分;圖5是根據(jù)本發(fā)明一個(gè)實(shí)施例的舊版本和通過對(duì)其進(jìn)行更新而獲得的新版本的示意圖;圖6示出了用于將圖5的舊版本更新為其新版本的更新包的一部分;圖7是根據(jù)本發(fā)明一個(gè)實(shí)施例的對(duì)更新包中的數(shù)字位移規(guī)則的生成進(jìn)行詳細(xì)說明的流程圖;圖8示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的示例性內(nèi)容和相關(guān)元數(shù)據(jù);圖9是根據(jù)本發(fā)明一個(gè)實(shí)施例的舊版本以及通過對(duì)其進(jìn)行更新而獲得的新版本的示意圖;圖9A是根據(jù)本發(fā)明一個(gè)實(shí)施例的與圖9的舊版本和新版本相關(guān)聯(lián)的元數(shù)據(jù)的示意圖;圖10示出了根據(jù)本發(fā)明一實(shí)施例的差異表及其根據(jù)圖9的示例的對(duì)應(yīng)引用位移規(guī)則;圖11是根據(jù)本發(fā)明一個(gè)實(shí)施例的與圖9的舊版本和新版本相關(guān)的部分元數(shù)據(jù)的示意圖;圖12示出了根據(jù)本發(fā)明一實(shí)施例的差異表及其根據(jù)圖9和11的示例的對(duì)應(yīng)引用位移規(guī)則;圖13是根據(jù)本發(fā)明一個(gè)實(shí)施例的對(duì)更新包中的引用位移規(guī)則的生成進(jìn)行詳細(xì)說明的流程圖;圖14是根據(jù)本發(fā)明的迭代實(shí)施例的內(nèi)容的迭代更新版本的示意圖;圖15是對(duì)本發(fā)明的迭代實(shí)施例進(jìn)行詳細(xì)說明的流程圖;圖16是說明對(duì)內(nèi)容的舊版本進(jìn)行更新以生成內(nèi)容的新版本的流程圖;圖17示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的用于生成內(nèi)容的舊版本與內(nèi)容的新版本之間的緊湊更新包的系統(tǒng);以及圖18示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的用于對(duì)內(nèi)容的舊版本進(jìn)行更新以生成內(nèi)容的新版本的系統(tǒng)。
具體實(shí)施例方式
圖1是根據(jù)本發(fā)明一個(gè)實(shí)施例的在移動(dòng)電話網(wǎng)絡(luò)中提供版本更新的系統(tǒng)101的示意圖。與存儲(chǔ)器裝置相連的移動(dòng)電話102執(zhí)行使其能夠進(jìn)行操作的程序。以下將當(dāng)前正在移動(dòng)電話上執(zhí)行的程序的版本稱為舊版本。經(jīng)常需要對(duì)這些程序進(jìn)行更新,以使得電話102可以執(zhí)行其新版本。該新版本在版本生成器105(例如,個(gè)人計(jì)算機(jī)(PC))中生成。該新版本被存儲(chǔ)在服務(wù)器103中并經(jīng)由發(fā)送器104發(fā)送至移動(dòng)電話102。
應(yīng)該注意,圖1所示的系統(tǒng)101是非限制性的示例,并且本發(fā)明并不限于移動(dòng)電話網(wǎng)絡(luò)或程序的更新。許多其他類型的內(nèi)容也需要更新,例如存儲(chǔ)在存儲(chǔ)裝置中的數(shù)據(jù)。例如,個(gè)人計(jì)算機(jī)(PC)或者任意其他計(jì)算機(jī)可以存儲(chǔ)包括其操作所需的數(shù)據(jù)或者在其上執(zhí)行的程序的運(yùn)行所需的數(shù)據(jù)的文件(例如,本領(lǐng)域的技術(shù)人員已知的“信息文件(infofile)”)。經(jīng)常需要經(jīng)由通信線路,例如經(jīng)由互聯(lián)網(wǎng)對(duì)該數(shù)據(jù)進(jìn)行更新。
因此,下文中將使用術(shù)語“內(nèi)容”而不是“程序”。同樣,將使用術(shù)語“存儲(chǔ)裝置”而不是圖1中的移動(dòng)電話的存儲(chǔ)器裝置。
為了對(duì)存儲(chǔ)在存儲(chǔ)裝置中的內(nèi)容進(jìn)行更新,生成更新包并將其存儲(chǔ)在服務(wù)器中,并且將其發(fā)送至存儲(chǔ)裝置或者與其相連的其他裝置。
應(yīng)該注意,存儲(chǔ)裝置可以與嵌入裝置相關(guān)聯(lián)。該嵌入裝置例如可以是包括諸如移動(dòng)電話和/或消費(fèi)者電子裝置的組中的成員。另選地,該存儲(chǔ)裝置可以與計(jì)算機(jī)相關(guān)聯(lián)。
圖2是用于將內(nèi)容的舊版本202更新為新版本203的更新包201的示意圖。內(nèi)容的舊版本(例如舊版本202)也被簡稱為“舊版本”。同樣,內(nèi)容的新版本(例如新版本203)也被簡稱為“新版本”。
應(yīng)該注意,可以根據(jù)對(duì)于本領(lǐng)域的技術(shù)人員本身已知的方法來生成更新包201。類似地,應(yīng)用該更新包以將舊版本202更新為新版本203的方法也是已知的。
還應(yīng)該注意,更新包常常被稱為“增量文件”、“差異文件”或者被簡稱為“增量”或“差異”,其中該增量是在將舊版本更新為新版本時(shí)發(fā)生的修改的集合。因此,本領(lǐng)域的技術(shù)人員應(yīng)該理解,更新包可以是增量文件,或者另選地,其可以包括增量文件和可能的附加信息。
舊版本202包括五個(gè)條目的塊204,每一個(gè)條目都可以是至少一個(gè)字的大小、一個(gè)或更多個(gè)字節(jié)的大小,或者任意其他可適用的量度。塊204后面是例如五百個(gè)條目的第二塊205。接下來,舊版本202包括條目206,該條目包括至少一個(gè)對(duì)第二塊205中的特定條目207的引用(例如指針)。以下將包括至少一個(gè)引用的條目稱為“引用條目”。例如,引用條目206可以包括與對(duì)207的絕對(duì)引用相關(guān)聯(lián)的指令,例如“跳轉(zhuǎn)到條目207的絕對(duì)地址”。
應(yīng)該理解,如果由舊版本和新版本(例如202和203)表示的內(nèi)容例如是計(jì)算機(jī)程序,則如本領(lǐng)域的技術(shù)人員所知,塊可以表示程序函數(shù)。
引用條目206后面是另一引用條目208,其包括對(duì)第二塊205中的不同條目209的引用。引用條目208后面是其他引用條目,它們都包括對(duì)第二塊205中的條目的引用,它們中的最后一個(gè)是引用條目210。盡管圖中未示出,但是根據(jù)該示例,在引用條目206和引用條目210之間例如有一百個(gè)引用條目。
應(yīng)該理解,舊版本202還可以包括非引用條目,即,不包含引用的條目。條目211是非引用條目的示例。除非具體說明,術(shù)語“條目”在下文中是指引用和非引用條目兩者。
另外,舊版本202可以包括對(duì)未包含在舊版本202中的其他條目的引用條目,即,對(duì)該內(nèi)容外部的條目的引用。例如,如果舊版本代表在執(zhí)行期間加載到計(jì)算機(jī)的RAM(隨機(jī)存取存儲(chǔ)器)中的計(jì)算機(jī)程序,則這種引用條目可以指存儲(chǔ)在該RAM的用于存儲(chǔ)該程序的區(qū)域外部的區(qū)域中的另一條目。
下文中,將包括對(duì)包含在該內(nèi)容中的條目的至少一個(gè)引用的引用條目稱為“顯式引用條目”,而將包括對(duì)該內(nèi)容外部的條目的至少一個(gè)引用的引用條目稱為“隱式引用條目”。
返回到圖2,盡管圖中未示出,但是在最后一個(gè)引用條目210后面有七十個(gè)條目。為方便起見,下文中將這七十個(gè)條目(包括條目211)稱為“終止條目”212。這七十個(gè)條目包括非引用條目(例如條目211)和/或隱式引用條目(例如條目213)。應(yīng)該說明的是,要根據(jù)該示例進(jìn)行更新的任意內(nèi)容的大小沒有限制,因此該內(nèi)容的任意塊的任意大小也沒有限制。
盡管圖2中未示出,但是引用條目之間可以存在非引用條目,并且引用條目不需要連續(xù)。例如,在引用條目206、208、…210之間的某處可以有一個(gè)或更多個(gè)非引用條目。
更新包201用于對(duì)內(nèi)容的舊版本202進(jìn)行修改,以生成該內(nèi)容的新版本203。根據(jù)更新包201來執(zhí)行更新處理,以生成該新版本203。
在該示例中,舊版本202與新版本203之間的一個(gè)差異是新版本203中沒有塊204,其中第二塊205后移并占用了存儲(chǔ)裝置上的塊204。根據(jù)該示例,塊204包括五個(gè)條目,因此第二塊205后移了五個(gè)條目。因此,可以理解,隨著塊205的后移,包括在其中的所有條目都相應(yīng)地進(jìn)行位移(位移了五個(gè)條目)。例如,對(duì)于條目207和209(及其在新版本中的對(duì)應(yīng)條目207’和209’)同樣如此。應(yīng)該注意,條目206包括對(duì)條目207的引用。在將條目206后移以生成條目206’之后,該條目仍然引用條目207,即,其引用舊版本中的207的地址。需要替換條目206’的內(nèi)容,以使其在新版本中引用新位置中的條目207’。
應(yīng)該注意,在這種情況下,不包括引用的非引用條目211的內(nèi)容以及隱式引用條目213的內(nèi)容不需要修改,盡管它們的位置也上移了五個(gè)條目。還應(yīng)該注意,在整個(gè)說明書中,除非特別指出,否則也可以將應(yīng)用于顯式引用條目的示例應(yīng)用于隱式引用條目。
現(xiàn)在回到更新包201,其包括用于將舊版本202更新為新版本203的命令。應(yīng)該認(rèn)為,在當(dāng)前示例中,命令被表示為字符串,這些字符串表示要通過對(duì)舊版本進(jìn)行更新來執(zhí)行的一個(gè)或更多個(gè)操作(例如,“復(fù)制”、“替換”等)。然而,用于表示命令的其他方式也是適用的,例如使用操作碼(簡稱為op碼),其中每一個(gè)命令都具有分配給它的預(yù)定op碼。另外,對(duì)于201中所示的命令,經(jīng)常通過另選方式來表示命令。例如,“替換”命令可以由插入命令來表示,其中所插入的內(nèi)容替換了現(xiàn)有內(nèi)容。
如圖所示,包含在包201中的第一命令是刪除五個(gè)條目,由此刪除102中的前五個(gè)條目,即塊204。接下來,該更新包包括下述的命令,該命令用于將五百個(gè)條目復(fù)制到新版本的起始位置,由此將塊205后移五個(gè)條目,以生成塊205’。
在復(fù)制塊205之后,表面上需要復(fù)制條目206、208、…、210,同時(shí)將它們的位置上移五個(gè)塊,以生成對(duì)應(yīng)的條目206’、208’、…、210’。然而,如上所述,需要將條目206’、208’、…、210’所包含的引用更新為引用207’、209’,…,而不是207、209,…。即,需要替換這些引用條目或者它們中的至少一部分??梢灾苯犹鎿Q該條目,而不是復(fù)制引用條目并隨后使用經(jīng)位移的引用對(duì)其進(jìn)行替換,從而省略了復(fù)制操作。因此,該更新包201包括一百條替換命令,每一個(gè)引用條目206、208、…、210一個(gè)替換命令,以使用對(duì)于對(duì)應(yīng)的經(jīng)位移條目(206’、208’、…、210’)的引用來替換它們。
在這一百條替換命令之后,該更新包201包括復(fù)制命令,用于將七十個(gè)終止條目212復(fù)制到新版本203中的經(jīng)替換的一百個(gè)引用條目的后面,即,在新版本203中,這七十個(gè)條目(包括用于生成條目211’和213’的條目211和213)后移五個(gè)條目。
本領(lǐng)域的技術(shù)人員可以理解,以上示例中的更新包201在這些命令當(dāng)中包括一百個(gè)替換命令,其中每一個(gè)命令都包括替換條目。即,更新包201包括一百個(gè)替換條目。注意,更新包可以通過有限帶寬通信線路(例如,互聯(lián)網(wǎng)或移動(dòng)電話(蜂窩電話)網(wǎng)絡(luò))傳送,所以減小更新包的尺寸是有益的。
因此,與現(xiàn)有技術(shù)中的用于生成和應(yīng)用更新包的現(xiàn)有方法不同,本發(fā)明公開了可以生成更高效的更新包,或者下文中被稱為“緊湊更新包”的其他方法。下文中,將用于生成這種高效更新包的一個(gè)實(shí)施例稱為“整數(shù)表示法實(shí)施例”,其中該實(shí)施例生成“整數(shù)位移規(guī)則”。以下參照?qǐng)D2和3來舉例說明整數(shù)位移規(guī)則。
應(yīng)該理解,根據(jù)本發(fā)明的某些實(shí)施例,可以使用整數(shù)值來表示舊內(nèi)容和新內(nèi)容(分別為202和203)中的條目??梢岳斫猓瑮l目是存儲(chǔ)在諸如磁盤或存儲(chǔ)器的存儲(chǔ)裝置中的數(shù)據(jù)。如果條目的大小為四個(gè)字節(jié),則可以將存儲(chǔ)在條目中的數(shù)據(jù)形象化為占用這四個(gè)字節(jié)的整數(shù)。圖3是根據(jù)本發(fā)明一個(gè)實(shí)施例的四字節(jié)條目301的整數(shù)表示的示意圖。最高有效字節(jié)(最左側(cè)字節(jié))302被二進(jìn)制值00001011(十六進(jìn)制為0x0B)占用,第二字節(jié)303被二進(jìn)制值10011101(十六進(jìn)制為0x9D)占用,第三字節(jié)304被值11110111(十六進(jìn)制為0xF7)占用,而最低有效字節(jié)305被值10000101(十六進(jìn)制位0x85)占用。因此,可以將這四個(gè)字節(jié)表示為具有十六進(jìn)制值0x0B9DF785的一個(gè)整數(shù)。也就是說,整數(shù)0x0B9DF785是條目301的整數(shù)表示,或者下文中所稱的int(301)。應(yīng)該注意,“int”代表“integer(整數(shù))”。
應(yīng)該注意,包括非引用條目在內(nèi)的任意條目也都可以由整數(shù)來表示,因此,例如int(211)是條目211的整數(shù)表示。
現(xiàn)返回到圖2,例如,顯式引用條目206可以包括程序指令“跳轉(zhuǎn)至條目207的絕對(duì)地址”。如果條目207的絕對(duì)地址為0x9DF785,則包含在條目206中的指令等價(jià)于“跳轉(zhuǎn)至0x9DF785”。程序指令可以由預(yù)定的op碼來表示。因此,“跳轉(zhuǎn)至”的op碼例如可以是十進(jìn)制整數(shù)“11”(或者十六進(jìn)制的0xB)。如以上參照?qǐng)D3所述,根據(jù)本示例的條目206的整數(shù)表示為0x0B9DF785。在這種情況下,op碼由字節(jié)302表示,而字節(jié)303、304和305表示被引用條目。即,字節(jié)303、304和305一起表示被引用條目,或者下文中所稱的ind(207)。應(yīng)該注意,“ind”表示“indicative(表示)”。
另選地,可以將整個(gè)整數(shù)視為表示被引用條目。根據(jù)該示例,如果條目206包括指令“跳轉(zhuǎn)至條目207”,則可以將整數(shù)0x0B9DF785視為ind(207),這與前面的實(shí)施例不同,其中只將0x9DF785視為該表示值。應(yīng)該理解,可以存在另一引用條目(盡管圖2中未示出),其可以包括諸如“調(diào)用條目207”的指令,其中該調(diào)用指令的op碼為十進(jìn)制整數(shù)27(或者十六進(jìn)制的0x1B)。根據(jù)該示例,int(引用條目)為0x1B9DF785。另外,在這種情況下,可以將0x1B9DF785稱為ind(被引用條目)或者ind(207)。即,根據(jù)該實(shí)施例,對(duì)于被引用條目的地址可以有一個(gè)以上的表示值。
還可以理解,表示值可以是條目的整數(shù)表示的任意部分(包括其全部)。另外,該示例涉及四字節(jié)大小的條目。這里僅將該大小用作為示例(以下將再次使用),并且可以使用任何可適用的條目大小。還應(yīng)注意,將數(shù)字(number)表示為整數(shù)僅是非限制性的示例;可以采用其他本身已知的數(shù)字表示。
注意,條目(包括引用條目和/或非引用條目)可以由整數(shù)值來表示,返回到圖2,可以使用整數(shù)來表示更新包201中的替換命令。例如,“Replace int(206),int(206)”等效于“Replace 206,206”(更新包201中的一部分)。
圖4示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的圖2的更新包的使用整數(shù)表示法的一部分。部分401是更新包201的包括替換命令的部分。注意,部分401與現(xiàn)有技術(shù)一致。應(yīng)該注意,本示例中的任一替換命令都與兩個(gè)引用條目相關(guān)聯(lián),舊版本中的一個(gè)和新版本中的一個(gè)。這兩個(gè)引用條目在下文中被稱為“替換對(duì)”。
本領(lǐng)域的技術(shù)人員可以理解,根據(jù)本發(fā)明的一個(gè)實(shí)施例,402等效于部分401,其中使用整數(shù)表示法來表示替換命令。當(dāng)使用整數(shù)表示法時(shí),每一個(gè)替換命令有兩個(gè)整數(shù)與之相關(guān)聯(lián)。這兩個(gè)整數(shù)在下文中被稱為“整數(shù)替換對(duì)”。整數(shù)替換對(duì)中的一個(gè)整數(shù)被稱為“修改前整數(shù)”(表示舊版本中的條目),而第二個(gè)被稱為“修改后整數(shù)”(表示新版本中的條目)。
從用于舊版本202中的顯式引用條目的整數(shù)替換對(duì),即402中的整數(shù)替換對(duì)可以看出,這些整數(shù)值反映了被引用條目的位移。例如,當(dāng)條目208和208’分別引用條目209和209’時(shí),可以看到整數(shù)替換對(duì)<int(208),int(208’)>。如果條目209最初位于地址0x9DF785,其中條目大小為四個(gè)字節(jié),則在將條目209的內(nèi)容后移五個(gè)條目(即,后移20個(gè)字節(jié))以生成條目209’之后,該條目209’將位于地址0x9DF771。注意到該引用條目的最低有效字節(jié)包括表示該被引用條目的地址的值,則可以理解,該整數(shù)表示的引用條目208的最低有效字節(jié)為0x9DF785(即,條目208引用條目209),而引用條目208’的最低有效字節(jié)為0x9DF711(即,條目208’引用條目209’)。因此,一起構(gòu)成整數(shù)替換對(duì)的這兩個(gè)整數(shù)之間的差異反映了在將舊版本202更新為新版本203時(shí)進(jìn)行的位移。下文中,將該差異被稱為“修改差異”。修改差異由diff和修改后的整數(shù)一起來表示,例如diff(208)。
因此,可以使修改前整數(shù)或者修改后整數(shù)與修改差異相關(guān)聯(lián),而不是使整數(shù)替換對(duì)中的修改前整數(shù)與修改后整數(shù)相關(guān)聯(lián)。在下文中,使得修改前整數(shù)與修改差異關(guān)聯(lián)在一起的對(duì)被稱為“整數(shù)位移對(duì)”。
返回到圖4,403是與使用整數(shù)位移對(duì)表示法的部分401和402等效的部分。
參照?qǐng)D3和4進(jìn)行的說明提供了用于理解本發(fā)明實(shí)施例的背景,該實(shí)施例使用了整數(shù)表示法,下文中將其稱為“整數(shù)表示法實(shí)施例”。
圖5示出了舊版本和新版本的更加復(fù)雜的示例(與圖2所示的舊版本和新版本相比),以例示和說明該整數(shù)表示法實(shí)施例。在該附圖中,對(duì)舊版本501進(jìn)行更新以生成新版本502。因此,舊版本501包括在生成新版本502時(shí)被刪除的塊503。下文中將被刪除塊的大小稱為size(503)。根據(jù)圖2的示例可以理解,在刪除了塊503之后,希望將新版本中的條目后移size(503)個(gè)條目。
在舊版本中,塊504位于塊503之后。塊504中標(biāo)記了六個(gè)條目(505、506、507、508、509和510)。下文中,將條目起始的地址標(biāo)記為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’對(duì)應(yīng)于塊504。如所希望的,將塊504’后移size(503)。條目505’、506’、507’、508’、509’和510’分別對(duì)應(yīng)于條目505、506、507、508、509和510。與塊504’相似,條目505’、506’、507’、508’、509’和510’也后移了size(503)。
在塊504之后,舊版本501包括標(biāo)記有一個(gè)條目514的塊513。條目514是引用了條目506的顯式引用條目,即,引用條目514包括表示地址addr(506)的值。在新版本中,塊513’對(duì)應(yīng)于塊513,而條目514’對(duì)應(yīng)于條目514。然而,一個(gè)或更多個(gè)條目的新塊515被插入到塊513’中,并且在條目514’之前。即,size(513’)>size(513)。根據(jù)該示例,size(515)小于size(503),因此可以理解,條目514’后移了(size(503)-size(515))。
返回到舊版本501,在塊513之后有第三塊516。該塊中標(biāo)記有五個(gè)條目,具體地,這些條目為條目517、518、519、511和512。條目517和518是引用了條目519和505的顯式引用條目,即條目517和518分別包括表示被引用條目519和505的值,換句話說,表示addr(519)和addr(505)的值。
在新版本中,塊516’對(duì)應(yīng)于塊516。同樣,條目517’、518’、519’、511’和512’分別對(duì)應(yīng)于條目517、518、519、511和512。在將塊515插入到塊513’中之后,可以理解,塊516’中的條目后移了(size(503)-size(515))個(gè)條目。
圖5的示例還示出了在舊版本中存在終止塊517,其與新版本中的塊517’相對(duì)應(yīng)。更新處理一個(gè)或更多個(gè)條目的新塊520插入到塊517’中。根據(jù)該示例,新塊520的大小為(size(503)-size(515)),因此,新版本502的總大小與舊版本501的基本相同。
應(yīng)該注意,參照?qǐng)D5提供的示例并不是限制性的??梢杂煞謩e包括可應(yīng)用于該示例的任意數(shù)量條目的任意數(shù)量的塊來構(gòu)成任意內(nèi)容的舊版本或新版本。類似地,當(dāng)將舊版本更新為新版本時(shí),該更新處理可以按照所需次數(shù)進(jìn)行插入、刪除、替換和/或執(zhí)行任意所需的操作,其中條目或塊的大小可以根據(jù)具體的應(yīng)用而改變。
應(yīng)該注意,條目的大小也是非限制性的,但是在下文中,將圖5所示的內(nèi)容中的條目的大小示范為4個(gè)字節(jié)。
本領(lǐng)域的技術(shù)人員可以理解,為了將舊版本501更新為新版本502,根據(jù)一個(gè)實(shí)施例,可以將塊504以及塊514的第一部分復(fù)制到新版本中,插入新塊515,然后將塊514的第二部分與塊516和517一起復(fù)制到新版本中。然而,如已參照?qǐng)D2所述,通過這種方式,新版本中的顯式引用條目將引用其原始地址中的條目,這與在舊版本中相同。例如,在舊版本中,顯式引用條目508引用條目511,因此,條目508的最低有效字節(jié)包括表示addr(511)的值。在舊版本中,條目508位于addr(508)。在將塊504復(fù)制到新版本中之后,可以理解,條目508位于addr(508’),其在本示例中位于addr(508)之后。然而,條目508仍然包括對(duì)條目511的引用,即,它包括表示addr(511)的值,在這種情況下,希望其通過包括表示addr(511’)的值來包括對(duì)條目511’的引用。因此,根據(jù)該實(shí)施例,在將內(nèi)容從舊版本復(fù)制到新版本中之后,以及在插入新塊(例如,塊515)之后,更新包可以包括用于替換引用條目的命令,例如“在508’中,使用表示addr(511’)的值來替換表示addr(511)的值”,或者簡寫為“Replace 508,508’”。
在提供了整數(shù)表示法實(shí)施例的背景討論(參照以上圖3和4)和示例性舊版本和新版本(圖5)之后,下面給出例示與根據(jù)現(xiàn)有技術(shù)獲得的更新包的一部分相比,如何根據(jù)該整數(shù)表示法實(shí)施例來獲得更新包的等效部分的說明。從該說明中可以顯見,根據(jù)本發(fā)明該實(shí)施例獲得的該部分可以比根據(jù)現(xiàn)有技術(shù)中的已知方法獲得的小很多。
現(xiàn)在轉(zhuǎn)到圖6,部分601包含用于對(duì)圖5所示的顯式引用條目進(jìn)行更新的替換指令。應(yīng)該注意,部分601是通過對(duì)圖5的舊版本和新版本應(yīng)用傳統(tǒng)的diff方法而生成的。還應(yīng)該注意,部分601是用于將舊版本501更新為新版本502的完全更新包的一部分(該完全更新包未示出)。該部分僅包括替換命令,而省略了其他命令,例如插入和/或刪除。應(yīng)該注意,在圖5的示例中有六個(gè)引用條目,因此在部分601中有六個(gè)替換命令。部分602是601的等效部分,被表示為整數(shù)替換對(duì)的形式,其中根據(jù)圖3和4的說明,可以理解,對(duì)于引用條目,術(shù)語“int(條目)”反映了其引用的地址。
參照?qǐng)D4進(jìn)一步說明了,可以將替換命令表示為整數(shù)位移對(duì)的形式,而不是使用整數(shù)替換對(duì)的表示法。即,可以對(duì)包含在其中的引用進(jìn)行修改,而不用考慮與其一起存儲(chǔ)的其他信息(例如op碼),以反映出被引用條目的位置的位移,而不是對(duì)引用條目進(jìn)行替換。
從圖5中可以得到,該示例中的某些條目的修改差異為size(503),而其他條目的特征在于修改差異為(size(503)-size(515))。因此,可以改變部分602,而不是使用替換命令,如603中所示,可以使用修改命令,該修改命令使用修改前整數(shù)位移對(duì)表示法。
應(yīng)該注意,整數(shù)位移對(duì)中的修改差異表示被引用條目的位移,而不是引用條目的位移。
604中示出了該更新包的相同部分,其中根據(jù)修改差異對(duì)修改命令進(jìn)行排序。應(yīng)該注意,經(jīng)排序的部分604包括兩個(gè)組。一個(gè)組包括用于修改int(509)、int(514)和int(518)的命令,其中修改差異為size(503)。第二組包括用于修改int(508)、int(510)和int(517)的命令,其中修改差異為(size(503)-size(515))。
應(yīng)該注意,整數(shù)或其部分表示被引用條目的地址。還應(yīng)該考慮到,在對(duì)引用條目進(jìn)行更新時(shí),需要對(duì)引用進(jìn)行修改,而無需考慮op碼或者與其相關(guān)聯(lián)的其他信息。因此,在整數(shù)位移對(duì)中,可以引用表示被引用條目的值,或者引用“ind(被引用條目)”,而不是引用整數(shù)。下文中,將一對(duì)ind(被引用條目)及其相關(guān)聯(lián)的修改差異稱為“表示位移對(duì)”。
應(yīng)該注意,盡管圖5和6中未示出,但是經(jīng)常存在引用同一被引用條目的一個(gè)以上的引用條目。如果被引用條目的表示值是引用條目的整數(shù)表示的一部分,則通??梢杂深愃频谋硎局祦肀硎舅羞@些引用條目。如果將整個(gè)整數(shù)用作被引用條目的表示值,則可能存在表示該引用條目的一個(gè)以上的表示值。
例如,被引用條目的地址為0x5F8B23。四個(gè)引用條目通過指定其地址來引用該條目。第一個(gè)具有op碼0xA2,第二個(gè)具有op碼0x0F,而第三個(gè)具有op碼0x1B。第四個(gè)引用條目具有與第一個(gè)相同的op碼(即,0xA2)。如果由三個(gè)最低有效字節(jié)來表示該表示值,則所有四個(gè)引用條目將被表示為ind(0x5F8B23)。相反,當(dāng)將整個(gè)整數(shù)用作表示值時(shí),將存在表示這四個(gè)引用條目的三個(gè)不同的表示值。第一和第四個(gè)引用條目將被表示為ind(0xA25F8B23),第二個(gè)引用條目將被表示為ind(0x0F5F8B23),而第三個(gè)引用條目將被表示為ind(0x1B5F8B23)。
返回到圖6,在605中,使用表示位移對(duì)表示法示出了與604等效的排序部分。605示出了在使引用塊504中的條目的引用條目位移時(shí),應(yīng)該對(duì)其中的表示值進(jìn)行修改,以反映size(503)的位移。在使引用塊516中的條目的引用條目位移時(shí),應(yīng)該對(duì)其中的表示值進(jìn)行修改,以反映(size(503)-size(515))的位移。
考慮到605中也存在這兩個(gè)組,可以根據(jù)ind(被引用條目)在內(nèi)部對(duì)每個(gè)組進(jìn)行排序,由此生成606??梢陨梢粋€(gè)復(fù)合修改命令來對(duì)表示塊504中的條目的所有值進(jìn)行更新,以反映size(503)的位移,而不是生成用于對(duì)具有表示塊504中的條目的值的引用條目進(jìn)行修改的三個(gè)修改命令。換句話說,如果引用條目包括表示505到507之間(包括505和507)的條目的值,則應(yīng)該對(duì)該值進(jìn)行修改以反映size(503)的位移。同樣,可以生成一個(gè)復(fù)合修改命令來對(duì)表示塊516中的條目的所有值進(jìn)行更新,以反映(size(503)-size(515))的位移,而不是生成用于對(duì)具有表示塊516中的條目的值的引用條目進(jìn)行修改的三個(gè)修改命令。換句話說,如果引用條目包括表示511到519之間(包括511和519)的條目的值,則應(yīng)該對(duì)該值進(jìn)行修改,以反映(size(503)-size(515))的位移,如607中所示。下文中,將復(fù)合修改命令稱為整數(shù)位移規(guī)則。即,607表示為了對(duì)圖5的示例中的顯式引用條目進(jìn)行更新,可以應(yīng)用的兩個(gè)整數(shù)位移規(guī)則。
因此,可以理解,使用整數(shù)位移規(guī)則的部分607與使用替換命令的部分601等效。然而,部分607僅包括兩個(gè)整數(shù)位移規(guī)則,而不是包括在601中的六個(gè)替換命令。因此,包括部分607的更新包與包括部分601的更新包等效。如果存儲(chǔ)整數(shù)位移規(guī)則所需的空間小于存儲(chǔ)其等效替換命令所需的空間,則可以通過使用該等效的整數(shù)位移規(guī)則來減小更新包的大小。
更新包大小的減小可以是顯著的。例如,考慮對(duì)移動(dòng)電話上的軟件版本進(jìn)行更新的非限制性應(yīng)用,整數(shù)位移規(guī)則常??梢怨?jié)省甚至幾萬條替換命令。
還應(yīng)該注意,除了使用整數(shù)位移規(guī)則以外,還可以采用任意的數(shù)字位移規(guī)則,因此,下文中,使用術(shù)語“數(shù)字位移規(guī)則”。
圖7是根據(jù)本發(fā)明一個(gè)實(shí)施例,對(duì)更新包中的數(shù)字位移規(guī)則的生成進(jìn)行詳細(xì)說明的流程圖。應(yīng)該理解,為了創(chuàng)建更新包和數(shù)字位移規(guī)則,應(yīng)該在舊版本與新版本之間使用diff(701,在本身已知的任意方法中),以檢測(cè)兩個(gè)版本之間的差異。目前有許多用于檢測(cè)版本之間的差異的可用工具,例如UNIX diff程序。該diff生成舊版本與新版本之間的多對(duì)差異,該多對(duì)差異中可以有替換對(duì)。如果該diff包括替換對(duì)(702),則將它們中的至少某些組合在一起(703),以形成該diff的一部分,由此例如創(chuàng)建與圖6的部分601相似的部分。接下來(704),如前面參照?qǐng)D4和6所例示的(參見其中的402和602),使用整數(shù)表示法對(duì)這些替換對(duì)進(jìn)行轉(zhuǎn)換,以成形整數(shù)替換對(duì)。
在將替換對(duì)轉(zhuǎn)換為整數(shù)替換對(duì)之后,通過將修改前整數(shù)及其修改差異關(guān)聯(lián)在一起(前面參照?qǐng)D4(403)和6(603)所例示的階段),來將這些整數(shù)替換對(duì)轉(zhuǎn)換(705)為整數(shù)位移對(duì)。根據(jù)如圖6的塊604中所示的修改差異對(duì)整數(shù)位移對(duì)進(jìn)行排序(706)。
在排序之后,使用各個(gè)被引用條目的表示值來替換(707)這些整數(shù)位移對(duì)中的修改前整數(shù),以形成表示位移對(duì)(前面參照?qǐng)D6(605)所例示的階段)。應(yīng)該注意,在這些情況下,當(dāng)存在具有相同修改差異的多個(gè)表示位移對(duì)(708)時(shí),根據(jù)其表示值對(duì)這些表示位移對(duì)進(jìn)行排序(709)。在這些情況下,當(dāng)將整個(gè)整數(shù)視為被引用條目的表示值時(shí),可以理解,塊707是冗余的,并且可以跳過,而在規(guī)則的整個(gè)生成處理中使用int值而不是ind。圖6的塊606是本附圖中的塊709的示例。
如果存在包括一個(gè)以上的具有相同修改差異的表示位移對(duì)的多個(gè)組,則可以對(duì)組中的表示位移對(duì)進(jìn)行組合(710),以形成數(shù)字位移規(guī)則,該數(shù)字位移規(guī)則表示該組中的第一個(gè)和最后一個(gè)被引用條目的表示值以及表示它們的特征的修改差異,如前面參照?qǐng)D6(參見607)所例示的。
注意,經(jīng)??梢圆捎眠M(jìn)一步的優(yōu)化。例如,如果存在兩個(gè)具有相同修改差異的數(shù)字位移規(guī)則,其中第一規(guī)則的最后一個(gè)被引用條目的表示值和第二規(guī)則的第一個(gè)被引用條目的表示值足夠接近,則可以對(duì)這兩個(gè)規(guī)則進(jìn)行組合,以形成一個(gè)組合數(shù)字位移規(guī)則。該組合數(shù)字位移規(guī)則表示第一數(shù)字位移規(guī)則的第一個(gè)被引用條目的表示值和第二數(shù)字位移規(guī)則的最后一個(gè)被引用條目的表示值,以及表示它們的特征的修改差異。應(yīng)該注意,在對(duì)兩個(gè)非調(diào)整(non-adjusting)數(shù)字位移規(guī)則進(jìn)行組合時(shí),它們之間的數(shù)字位移規(guī)則(或者表示位移對(duì))由于該組合規(guī)則而被取消,因此它們的修改前引用條目容易被錯(cuò)誤地更新(即,它們可能被更新而反映出錯(cuò)誤的位移)。
應(yīng)該注意,本發(fā)明并不限于如圖7所描述的特定操作順序以及獲得整數(shù)位移規(guī)則的方式,或者圖6的部分607中所使用的整數(shù)位移規(guī)則術(shù)語。
另外,到目前為止所述的實(shí)施例通過使用數(shù)字位移規(guī)則而減小了更新包的大小,由此生成緊湊更新包。注意,在使用不同術(shù)語(例如“增量”或者“差異”或“diff”)來描述更新包的這些情況下,緊湊更新包例如可以被稱為“緊湊差異結(jié)果”。
根據(jù)一不同的實(shí)施例,內(nèi)容常??梢园殡S有相關(guān)描述性數(shù)據(jù)(下文稱為“元數(shù)據(jù)”)。提供元數(shù)據(jù)的一般形式為用于描述計(jì)算機(jī)程序的符號(hào)表、調(diào)試表和目標(biāo)代碼連接器映像。然而,元數(shù)據(jù)并不限于計(jì)算機(jī)程序,其他類型的內(nèi)容也可以具有元數(shù)據(jù)。還應(yīng)該注意,例如可以通過將相關(guān)元數(shù)據(jù)存儲(chǔ)在不同的文件中或者通過將相關(guān)元數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫中,來將該相關(guān)元數(shù)據(jù)與內(nèi)容相分離。另選地,如可適用于該示例的,可以將元數(shù)據(jù)存儲(chǔ)為內(nèi)容的一部分。
圖8示出了示例性內(nèi)容和相關(guān)元數(shù)據(jù)。內(nèi)容801包括802、803、804和805四個(gè)塊。塊803開始于地址addr(803),塊804開始于地址addr(804),而塊805開始于地址addr(805)。相關(guān)元數(shù)據(jù)806描述了該內(nèi)容及其塊,其中對(duì)于各個(gè)塊,元數(shù)據(jù)806提供了起始地址和塊的長度。然而,應(yīng)該注意,這是非限制性的示例,并且元數(shù)據(jù)可以包括其他數(shù)據(jù)而不是各個(gè)塊的起始地址和長度。
當(dāng)生成用于將內(nèi)容的舊版本更新為其新版本的更新包時(shí),如果元數(shù)據(jù)與該內(nèi)容相關(guān)聯(lián),則可以使用元數(shù)據(jù)來對(duì)引用的修改進(jìn)行編碼,如以下參照?qǐng)D9和10所述。
圖8的示例和說明將作為理解如何獲得根據(jù)本發(fā)明另一實(shí)施例的所謂的“引用位移規(guī)則”的基礎(chǔ),如以下將參照?qǐng)D9和圖9A的進(jìn)一步詳細(xì)說明,圖9是舊版本901以及通過其更新而獲得的新版本902的示意圖,而圖9A是根據(jù)本發(fā)明一個(gè)實(shí)施例的與圖9的舊版本和新版本相關(guān)聯(lián)的元數(shù)據(jù)和差異表(分別為9A01、9A02和9A03)。
舊版本901包括四個(gè)塊(905、906、907、908),它們各自的起始地址為addr(905)、addr(906)、addr(907)和addr(908)。在新版本中,將至少一個(gè)條目的新塊909添加到塊905中,由此生成對(duì)應(yīng)的塊905’。可以理解,塊905’的大小因此比塊905的大小大了size(909)。另外,如果在更新處理中沒有再出現(xiàn)向該內(nèi)容中插入另外的條目,或者從該內(nèi)容中刪除條目,則預(yù)期新塊909前面的條目前移size(909)。
在塊905’前面的塊906’對(duì)應(yīng)于塊906,塊907’對(duì)應(yīng)于塊907,而塊908’對(duì)應(yīng)于塊908。還在塊907’中插入了一個(gè)或更多個(gè)條目的新塊910。該新塊的大小為size(910)。因此,新條目910前面的條目前移了(size(909)+size(910))。
在舊版本中,塊906包括至少三個(gè)顯式引用條目911、912和913,其相對(duì)應(yīng)地引用了條目914、915和916。被引用條目914在塊908中,被引用條目915在塊907中,而被引用條目916在塊906中。另外,塊908包括對(duì)條目918進(jìn)行引用的至少一個(gè)顯式引用條目917。與被引用條目915相同,被引用條目918也在塊907中。
與舊版本901相關(guān)聯(lián)的元數(shù)據(jù)9A01對(duì)這四個(gè)塊、其各自的起始地址以及其長度進(jìn)行了描述。與新版本902相關(guān)聯(lián)的元數(shù)據(jù)9A02對(duì)其中所包括的塊進(jìn)行了描述。通過比較元數(shù)據(jù)9A01和元數(shù)據(jù)9A02,可以知道,該示例中的塊905’的起始地址與舊版本的塊905的相同。然而,塊906’的起始地址等于(addr(906)+size(909))。同樣,當(dāng)與舊版本的塊907的起始地址進(jìn)行比較時(shí),塊907的起始地址也反映出size(909)的位移,即addr(907’)=addr(907)+size(909)。另一方面,塊908’的起始地址表示了(size(909)+size(910))的位移,即,addr(908’)=addr(908)+size(909)+size(910)。
盡管以下將根據(jù)圖9的特定示例來說明如何獲得引用位移規(guī)則,但是順便提及,應(yīng)該注意,圖9、9A和10的示例是非限制性的。舊版本和新版本可以具有任意可適用的數(shù)量的塊,在將舊版本更新為新版本時(shí),可以在任意位置處插入新塊和條目,或者將其刪除。還應(yīng)該理解,可以通過使用舊版本中的地址來表示新版本的元數(shù)據(jù)9A02,并且在可適用時(shí)加上所插入塊的大小。將結(jié)果和修改差異(即,表示舊版本中的各個(gè)塊及其在新版本中的對(duì)應(yīng)塊的起始地址的特征的位移)一起稱為“差異表”。1000(參見圖10)中示出了該差異表,其為與元數(shù)據(jù)9A01和9A02相對(duì)應(yīng)的差異表。
可以理解,可以根據(jù)差異表1000來生成引用位移規(guī)則。例如,如果引用條目引用了塊906’中的另一條目,并且遵循差異表中的信息,則可以理解,在新版本中,應(yīng)該對(duì)其對(duì)應(yīng)的引用條目進(jìn)行修改,以在被引用條目位置中反映出size(909)的位移。同樣,如果第二引用條目引用了塊908’中的另一條目,則可以理解,在新版本中,應(yīng)該對(duì)其對(duì)應(yīng)的引用條目進(jìn)行修改,以在被引用條目位置中反映出size(909)+size(910)的位移。
總的來說,差異表由此反映了引用位移規(guī)則。例如,對(duì)于塊906’中的各個(gè)被引用條目,特征位移是size(909)。同樣,對(duì)于塊907’中的各個(gè)被引用條目,特征位移也是size(909),而對(duì)于塊908’中的各個(gè)被引用條目,特征位移是size(909)+size(910)。
可以根據(jù)差異表中所示的塊的起始地址和長度來確定引用條目是否引用了特定塊中的另一條目。因此,引用位移規(guī)則可以由示例性表示法“Modify<addr(被引用塊),size(被引用塊)>,位移”來表示。
在圖9A的示例中,可以看出塊906’和907’都以相同的位移為特征。因?yàn)閴K906’和907’是連續(xù)的,所以可以理解,可以對(duì)它們的兩個(gè)引用位移規(guī)則進(jìn)行組合,以形成表示“Modify<addr(906’),size(906’)+size(907’)>,size(909)”的一個(gè)引用位移規(guī)則。
在圖10中,塊1001例示了基于差異表1000的引用位移規(guī)則。在該示例中,示出了三個(gè)引用位移規(guī)則(1002、1003和1004)。
然而,如本身已知的,元數(shù)據(jù)經(jīng)常不對(duì)內(nèi)容的一個(gè)或更多個(gè)塊進(jìn)行描述。例如,參見圖9和圖11。在圖11中示出了圖9的舊版本901的元數(shù)據(jù)1101和圖9的新版本902的元數(shù)據(jù)1102。應(yīng)該注意,元數(shù)據(jù)1101和1102是部分的,即,沒有描述塊907及其對(duì)應(yīng)的塊907’。因此可以理解,在圖12的差異表1201中,也沒有對(duì)塊907’的差異進(jìn)行描述。這影響了1202中所示的引用位移規(guī)則的生成。與圖9和10的先前示例相同,在當(dāng)前示例中,也存在三個(gè)引用位移規(guī)則1203、1204和1205。然而,因?yàn)闆]有對(duì)塊907’進(jìn)行描述,所以第二規(guī)則1204對(duì)應(yīng)于與先前示例的第二規(guī)則1003相比更小的塊。因此,在這種情況下,不能根據(jù)引用位移規(guī)則對(duì)引用了塊907’中的另一條目的引用條目進(jìn)行修改。
然而,通過以上參照?qǐng)D5、6和7對(duì)數(shù)字位移規(guī)則的說明,本領(lǐng)域的技術(shù)人員可以理解,可以在引用位移規(guī)則不適用的情況下嘗試并應(yīng)用數(shù)字位移規(guī)則。應(yīng)該注意,利用數(shù)字位移規(guī)則的方法不需要元數(shù)據(jù),因此在這種情況下利用數(shù)字位移規(guī)則是適用的。
圖13是根據(jù)本發(fā)明一個(gè)實(shí)施例的對(duì)更新包中的引用位移規(guī)則的生成進(jìn)行詳細(xì)說明的流程圖。在接收到舊版本和新版本各自的元數(shù)據(jù)(1301)之后,創(chuàng)建差異表(例如圖10的差異表1000)(1302)。該差異表至少包括與舊版本中的塊有關(guān)的信息(例如其起始地址),該信息與和新版本中其各自的對(duì)應(yīng)塊有關(guān)的信息(例如其起始地址)相關(guān)聯(lián)。另選地,該差異表至少可以包括與舊版本中的塊有關(guān)的信息,該信息與和其各自的修改差異(即,其位移值)有關(guān)的信息相關(guān)聯(lián)。應(yīng)該注意,其他另選方案也是允許的,例如至少包括與新版本中的塊有關(guān)的信息,該信息與和其各自的修改差異有關(guān)的信息相關(guān)聯(lián)。
對(duì)于該差異表中描述的各個(gè)塊,生成引用位移規(guī)則(1304)。接下來,對(duì)涉及相鄰塊的引用位移規(guī)則進(jìn)行組合。應(yīng)該注意,本發(fā)明并不限于圖13中所描述的特定操作順序以及獲得引用位移規(guī)則的方式。
還應(yīng)該注意,用于描述引用位移規(guī)則的表示法是非限制性的,也可以采用其他表示法。例如,可以指定由該規(guī)則所覆蓋的塊或多個(gè)塊(換句話說,“區(qū)段”)中的第一個(gè)條目和最后一個(gè)條目,而不是指定該區(qū)段的第一個(gè)條目和長度。注意,后者也應(yīng)用于參照?qǐng)D7所述的數(shù)字位移規(guī)則,已作必要修正。
以上描述對(duì)用于在將舊版本更新為新版本的過程中,生成數(shù)字和引用位移規(guī)則以更新引用條目中的引用的實(shí)施例進(jìn)行了說明。應(yīng)該注意,本發(fā)明并不限于上述特定的數(shù)字位移規(guī)則和引用位移規(guī)則。更普遍地,術(shù)語“位移規(guī)則”是指對(duì)引用條目進(jìn)行更新,以在新版本中反映引用條目的位移。
下文中,“轉(zhuǎn)換元素”是用于指代與更新包相關(guān)聯(lián)的位移規(guī)則的集合的術(shù)語。即,轉(zhuǎn)換元素可以包括至少一個(gè)數(shù)字位移規(guī)則,和/或至少一個(gè)引用位移規(guī)則,以及/或者在將舊版本更新為新版本時(shí)可以采用的任意其他位移規(guī)則。因此,根據(jù)以上說明,本領(lǐng)域的技術(shù)人員可以理解,包含至少一個(gè)轉(zhuǎn)換元素的更新包是緊湊更新包。
在對(duì)舊版本應(yīng)用轉(zhuǎn)換元素時(shí),應(yīng)該理解,引用條目可能經(jīng)常被錯(cuò)誤地更新。例如,考慮圖9所示的示例,其中所插入的條目910被插入到塊907中,并且在條目915’的后面。該示例中的這種變化不會(huì)影響差異表1000,并且引用位移規(guī)則將與圖10(參見1001)中所述的類似。然而,可以理解,條目915’和918’前移了(size(909)+size(910)),而不是如差異表1000所預(yù)測(cè)的size(909)。因此,與1001的引用位移規(guī)則所表示的不同,應(yīng)該對(duì)引用條目912’和917’進(jìn)行修改,以反映出(size(909)+size(910))而不是size(909)的位移。
根據(jù)下文中被稱為本發(fā)明的“一個(gè)改進(jìn)”實(shí)施例的本發(fā)明的實(shí)施例,可以應(yīng)用轉(zhuǎn)換元素,該轉(zhuǎn)換元素包括圖10的1001的引用位移規(guī)則,通過該引用位移規(guī)則生成經(jīng)修改的版本,然后通過在經(jīng)修改的版本與新版本之間應(yīng)用diff應(yīng)用程序(utility),來提供對(duì)于受到該轉(zhuǎn)換元素影響的錯(cuò)誤引用條目的矯正。該diff程序常常被簡稱為“diff”,經(jīng)修改的版本與新版本之間的比較在下文中被稱為“經(jīng)修改的diff”,其中用于生成轉(zhuǎn)換元素的第一diff(舊版本和新版本之間的比較)在下文中被稱為“完全diff”。將完全diff的輸出稱為“完全增量”,而將經(jīng)修改的diff的輸出稱為“修改增量”。
總的來說,可以理解,完全diff對(duì)舊版本與新版本之間存在的所有變化進(jìn)行檢測(cè),例如包括替換對(duì)(即,如上所述的經(jīng)位移的顯式引用條目)和諸如插入條目和刪除條目的其他變化,而經(jīng)修改的diff實(shí)際上對(duì)較少的替換和可能的錯(cuò)誤替換對(duì)以及其他變化進(jìn)行檢測(cè)。因此,與完全增量相比,修改增量的大小更小。
然而,修改增量和轉(zhuǎn)換元素可以一起構(gòu)成可以對(duì)舊版本進(jìn)行更新并生成其新版本的更新包。與包括完全增量而不包括轉(zhuǎn)換元素的“簡單更新包”不同,下文中將由至少一個(gè)轉(zhuǎn)換元素和修改增量構(gòu)成的這種輸出包稱為“復(fù)合更新包”。注意,與其等效替換命令相比,轉(zhuǎn)換元素的大小可以更小,所得到的復(fù)合更新包的大小通常比本身已知的簡單更新包更小。因此,下文中將復(fù)合更新包視為緊湊更新包。根據(jù)本發(fā)明的實(shí)施例,緊湊更新包至少包括轉(zhuǎn)換元素和與其相關(guān)聯(lián)的修改增量。
可以理解,通過在緊湊更新包中采用轉(zhuǎn)換元素以及與其相關(guān)聯(lián)的經(jīng)修改的diff(“前向轉(zhuǎn)換順序”或者換句話說,“前向更新指示符”),可以生成新版本,其中由修改增量來替換被轉(zhuǎn)換元素錯(cuò)誤修改的條目,并通過獲得其新版本中的正確內(nèi)容的方式對(duì)其進(jìn)行修改(以下將詳細(xì)討論應(yīng)用更新包的過程)。然而,應(yīng)該注意,通常應(yīng)該在下文中被稱為“后向轉(zhuǎn)換順序”的轉(zhuǎn)換元素之前應(yīng)用經(jīng)修改的diff。以下將詳細(xì)說明后向轉(zhuǎn)換順序。
然而,可以說明,可以從修改增量中提取另外的轉(zhuǎn)換元素,而不是將修改增量與轉(zhuǎn)換元素進(jìn)行組合來形成緊湊更新包,以有助于先前的轉(zhuǎn)換元素或者生成要與先前的轉(zhuǎn)換元素和增量關(guān)聯(lián)在一起的另外的轉(zhuǎn)換元素,以形成更小的緊湊更新包。因此,下面參照?qǐng)D14對(duì)被稱為“迭代實(shí)施例”的本發(fā)明的另一實(shí)施例進(jìn)行說明。
圖14是根據(jù)本發(fā)明的迭代實(shí)施例的用于更新內(nèi)容的版本的迭代的示例性示意圖。版本1401是舊版本,而版本1402是新版本。該附圖示出了根據(jù)本發(fā)明的迭代實(shí)施例的用于將舊版本1401更新為新版本1402的緊湊更新包的生成。舊版本1401包括塊1403。除了塊1403以外,還有另一個(gè)塊1404,其至少包括一些顯式引用條目1405、1406、1407、1408、1409、1410、1411、1412、1413和1414。塊1404還包括非引用條目1415。
在新版本1402中,塊1403’和1404’與塊1403和1404相對(duì)應(yīng),而條目1405’、1406’、1407’、1408’、1409’、1410’、1411’、1412’、1413’、1414’和1415’分別與條目1406、1407、1408、1409、1410、1411、1412、1413、1414和1415相對(duì)應(yīng)。將至少一個(gè)條目1416插入到塊1403’中,由此使其大小增大size(1416),并且將至少一個(gè)大小為size(1417)的條目1417插入到塊1404’中、條目1405’之后。
應(yīng)該注意,引用條目1405、1411和1414的內(nèi)容基本相同,因此對(duì)應(yīng)的引用條目1405’、1411’和1414’的內(nèi)容也基本相同。類似地,1406、1412和1414的內(nèi)容基本相同,因此對(duì)應(yīng)的引用條目1406’、1412’和1414’的內(nèi)容也基本相同。
條目1405’、1406’、…、1410’為顯式引用條目,與舊版本相比,在新版本中對(duì)其內(nèi)容進(jìn)行了修改(即,它們的被引用條目發(fā)生了位移)。還對(duì)顯式引用條目1411’、1412’、1413’和1414’進(jìn)行相同的操作。然而,原本已知的diff應(yīng)用程序不能識(shí)別出條目1417為插入到新版本1402中的新條目,而條目1405’、1406’、…、1410’、…為經(jīng)位移的條目,因此,該diff應(yīng)用程序錯(cuò)誤地檢測(cè)為條目1417替換了條目1405。此外,該diff應(yīng)用程序識(shí)別出條目1415’與條目1415相同(因此為其副本),并且進(jìn)行同步而檢測(cè)(這一次是正確的)為條目1411’替換了條目1411等等。
因此,根據(jù)完全diff而生成了完全增量,其(部分錯(cuò)誤地)表示如下1417替換1405;1405’替換1406;1406’替換1407;1407’替換1408;1408’替換1409;1409’替換1410;1415’是1415的副本;1411’替換1411;1412’替換1412;1413’替換1413;以及1414’替換1414。
例如,根據(jù)以上圖7和13中所示的方法,基于該完全增量而生成轉(zhuǎn)換元素。
注意,條目1405、1411和1414基本相同(其對(duì)應(yīng)的條目也這樣),并且條目1406、1412和1414基本相同(其對(duì)應(yīng)的條目也這樣),并且在檢測(cè)到1411’替換了1411以及1413’替換了1413時(shí),轉(zhuǎn)換元素可以估計(jì)出1405應(yīng)該被1405’替換。類似地,通過檢測(cè)到1412’替換了1412以及1414’替換了1414,轉(zhuǎn)換元素可以估計(jì)出1406應(yīng)該被1406’替換。
將該轉(zhuǎn)換元素應(yīng)用于舊版本1401,從而生成經(jīng)修改的版本1418。應(yīng)該注意,轉(zhuǎn)換元素修改(或轉(zhuǎn)換)了舊版本中的多個(gè)條目,但是其沒有進(jìn)行諸如刪除和/或插入條目的任何其他改變。因此,經(jīng)修改的版本1418相對(duì)于舊版本1401沒有進(jìn)行位移。
根據(jù)本發(fā)明的一個(gè)改進(jìn)實(shí)施例,可以使用經(jīng)修改的diff,以在經(jīng)修改的版本1418與新版本1402之間進(jìn)行比較。所得到的修改增量將識(shí)別出附加元素的插入、其他元素的刪除以及其余元素的替換(其中有未經(jīng)過轉(zhuǎn)換元素處理的條目1407、1408、1409和1410)。該修改增量與轉(zhuǎn)換元素一起作為生成緊湊更新包的基礎(chǔ)。
另選地,根據(jù)本發(fā)明的迭代實(shí)施例,例如根據(jù)以上圖7和13所示的方法,該修改增量應(yīng)該作為用于生成另外的新轉(zhuǎn)換元素的基礎(chǔ),而不是生成緊湊更新包。該新轉(zhuǎn)換元素與在先前的迭代中生成的轉(zhuǎn)換元素一起構(gòu)成復(fù)合轉(zhuǎn)換元素??梢詫⒃撔罗D(zhuǎn)換元素應(yīng)用于經(jīng)修改的版本1418,以生成要通過經(jīng)修改的diff與新版本1402進(jìn)行比較的另一經(jīng)修改的版本(未示出),等等。停止迭代的一個(gè)示例性終止條件為,通過迭代生成的修改增量的大小與新轉(zhuǎn)換元素的大小之和大于或等于先前的修改增量的大小與先前的復(fù)合轉(zhuǎn)換元素的大小之和。當(dāng)?shù)V箷r(shí),根據(jù)該復(fù)合轉(zhuǎn)換元素和修改增量來生成緊湊更新包。
盡管以下將參照?qǐng)D15的流程圖以概要的方式對(duì)迭代實(shí)施例進(jìn)行說明,但是順便提及,應(yīng)該注意,圖14的示例是非限制性的。舊版本和新版本可以具有任意可適用數(shù)量的塊,在將舊版本更新為新版本時(shí),可以將新塊和條目插入在任意位置,或者將其刪除,可以執(zhí)行任意次數(shù)的迭代,并且可以使用任意可適用的終止條件(或“停止標(biāo)準(zhǔn)”)來停止迭代。即,如果不滿足停止標(biāo)準(zhǔn),則該處理進(jìn)行到下一次迭代。
圖15是對(duì)本發(fā)明的迭代實(shí)施例進(jìn)行詳細(xì)說明的流程圖。注意,根據(jù)該流程圖生成的更新包為前向轉(zhuǎn)換順序。
在開始時(shí),所述方法接收待更新的內(nèi)容的至少舊版本和新版本,并且如果有的話,還接收元數(shù)據(jù)。這兩個(gè)版本和元數(shù)據(jù)用作生成(1501)轉(zhuǎn)換元素以及確定(1502)初始增量大小的基礎(chǔ),其中可以理解,該復(fù)合轉(zhuǎn)換元素與在1501中生成的轉(zhuǎn)換元素最初是相同的(1503)。將該轉(zhuǎn)換元素應(yīng)用于(1504)舊版本,由此生成經(jīng)修改的版本。接下來,在對(duì)經(jīng)修改的版本和新版本應(yīng)用經(jīng)修改的diff時(shí),生成(1505)修改增量,并且該修改增量用作生成(1506)新轉(zhuǎn)換元素的基礎(chǔ)。確定(1507)該新轉(zhuǎn)換元素的大小。
將該新轉(zhuǎn)換元素并入(1508)到復(fù)合轉(zhuǎn)換元素中。確定新轉(zhuǎn)換元素的大小(1509)以及修改增量的大小(1510)。
如果復(fù)合轉(zhuǎn)換元素的大小與增量大小之和小于新轉(zhuǎn)換元素的大小與修改增量的大小之和(1511),則該新轉(zhuǎn)換元素變?yōu)檗D(zhuǎn)換元素(1512),該增量大小變?yōu)樾略隽看笮?1513),并且將該新轉(zhuǎn)換元素應(yīng)用于經(jīng)修改的版本(1514),由此生成新的經(jīng)修改的版本。返回到1505,創(chuàng)建新的修改增量。
然而,如果在1511中確定轉(zhuǎn)換元素的大小與修改增量大小之和等于或大于復(fù)合轉(zhuǎn)換元素的大小與增量大小之和,則根據(jù)復(fù)合轉(zhuǎn)換元素和修改增量來生成更新包(1515)。另選地,在1511,如果緊湊更新包大于在先前的迭代中生成的緊湊更新包,則滿足停止標(biāo)準(zhǔn)。
應(yīng)該理解,也可以按照后向轉(zhuǎn)換順序來執(zhí)行該迭代實(shí)施例,即,在舊版本和新版之間應(yīng)用完全diff,以生成初始轉(zhuǎn)換元素,其中通過對(duì)新版本應(yīng)用轉(zhuǎn)換元素來創(chuàng)建經(jīng)修改的版本。接下來,在舊版本和經(jīng)修改的版本之間生成修改增量,以生成新轉(zhuǎn)換元素,等等。
對(duì)更新包進(jìn)行標(biāo)記,以表示生成了符合該更新包的轉(zhuǎn)換順序。
應(yīng)該注意,本發(fā)明并不限于圖15中所述的特定操作順序以及生成更新包的方式。
已根據(jù)本發(fā)明的多種非限制性實(shí)施例對(duì)更新包的生成進(jìn)行了說明,下面對(duì)使用更新包來更新舊版本以生成新版本進(jìn)行說明。通過非限制性示例的方式,通過無線通信介質(zhì)來傳輸更新包,并由移動(dòng)電話裝置進(jìn)行接收。該移動(dòng)電話裝置包括處理器,其被構(gòu)造用來對(duì)所接收的更新包進(jìn)行處理,并對(duì)存儲(chǔ)在其中的程序和/或數(shù)據(jù)的舊版本進(jìn)行更新,以生成存儲(chǔ)在移動(dòng)電話裝置中并且可以在移動(dòng)電話裝置中運(yùn)行的新版本。
注意,關(guān)注圖16,其示出了根據(jù)本發(fā)明一個(gè)實(shí)施例,對(duì)內(nèi)容的舊版本進(jìn)行更新以生成內(nèi)容的新版本的流程圖。根據(jù)本實(shí)施例的更新包包括轉(zhuǎn)換元素和修改增量。應(yīng)該注意,更新包包括前向更新指示符或者后向更新指示符。
在獲得緊湊更新包(1601)之后,提取包含在其中的轉(zhuǎn)換元素(1602)。
如果更新包包括前向更新指示符,如在1603所檢測(cè)到的,則對(duì)舊版本應(yīng)用轉(zhuǎn)換元素(1604),由此生成經(jīng)修改的版本。然后從該更新包中提取(1605)修改增量并將其應(yīng)用于(1606)經(jīng)修改的版本。另一方面,如果在1603和1607中發(fā)現(xiàn)該更新包包括后向更新指示符,則首先提取(1605)修改增量并將其應(yīng)用于(1606)舊版本,以生成經(jīng)修改的版本,然后對(duì)該經(jīng)修改的版本應(yīng)用(1608)轉(zhuǎn)換元素。在兩種情況下,結(jié)果都是新版本。
圖17示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的用于生成內(nèi)容的舊版本和內(nèi)容的新版本之間的緊湊更新包的系統(tǒng)1701。該系統(tǒng)包括轉(zhuǎn)換元素生成器1702,用于生成與舊版本和新版本相關(guān)聯(lián)的轉(zhuǎn)換元素;經(jīng)修改版本生成器1703,用于生成經(jīng)修改的版本,包括對(duì)舊版本應(yīng)用轉(zhuǎn)換元素;更新包生成器1704,用于生成緊湊更新包。該緊湊更新包包括轉(zhuǎn)換元素和基于經(jīng)修改的版本以及新版本的修改增量。
圖18示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的用于對(duì)內(nèi)容的舊版本進(jìn)行更新以生成內(nèi)容的新版本的系統(tǒng)1801。該系統(tǒng)包括輸入模塊1802和處理器1803。該輸入模塊被構(gòu)造用來獲得緊湊更新包,該緊湊更新包包括與所述舊版本和新版本相關(guān)聯(lián)的轉(zhuǎn)換元素、修改增量,以及前向更新或后向更新的指示。在前向更新指示的情況下,該處理器被構(gòu)造用來生成經(jīng)修改的版本,包括對(duì)舊版本應(yīng)用該轉(zhuǎn)換元素。該處理器還被構(gòu)造用來生成新版本,包括對(duì)經(jīng)修改的版本應(yīng)用該修改增量。在后向更新指示的情況下,該處理器被構(gòu)造用來生成經(jīng)修改的版本,包括對(duì)舊版本應(yīng)用該修改增量。該處理器還被構(gòu)造用來生成新版本,包括對(duì)經(jīng)修改的版本應(yīng)用該轉(zhuǎn)換元素。
還可以理解,根據(jù)本發(fā)明的系統(tǒng)可以是經(jīng)適當(dāng)編程的計(jì)算機(jī)。同樣,本發(fā)明意在一種計(jì)算機(jī)可讀的計(jì)算機(jī)程序,用于執(zhí)行本發(fā)明的方法。本發(fā)明還意在一種機(jī)器可讀的存儲(chǔ)器,其實(shí)際上包含有可由該機(jī)器執(zhí)行的指令程序,用于執(zhí)行本發(fā)明的方法。
以特定的具體程度對(duì)本發(fā)明進(jìn)行了說明,但是本領(lǐng)域的技術(shù)人員很容易理解,在不脫離以下權(quán)利要求的范圍的情況下,可以進(jìn)行多種替換和修改。
權(quán)利要求
1.一種用于生成內(nèi)容的舊版本與內(nèi)容的新版本之間的緊湊更新包的方法,該方法包括(i)生成與所述舊版本和新版本相關(guān)聯(lián)的轉(zhuǎn)換元素;(ii)生成經(jīng)修改的版本,該生成包括對(duì)所述舊版本和新版本中的一個(gè)版本應(yīng)用所述轉(zhuǎn)換元素;(iii)生成所述緊湊更新包;該緊湊更新包包括所述轉(zhuǎn)換元素以及基于至少所述經(jīng)修改的版本和在(ii)中規(guī)定的所述一個(gè)版本以外的版本的修改增量。
2.根據(jù)權(quán)利要求1所述的方法,其中所述修改增量是通過在所述經(jīng)修改的版本和在(ii)中規(guī)定的所述一個(gè)版本以外的版本之間應(yīng)用diff應(yīng)用程序而獲得的。
3.根據(jù)權(quán)利要求1或2所述的方法,還包括iv)提供所述緊湊更新包。
4.根據(jù)以上權(quán)利要求中的任意一項(xiàng)所述的方法,其中,在(ii)中規(guī)定的所述一個(gè)版本是內(nèi)容的舊版本,而在(iii)中規(guī)定的另一版本的程序是內(nèi)容的新版本。
5.根據(jù)權(quán)利要求1至3中的任意一項(xiàng)所述的方法,其中,在(ii)中規(guī)定的所述一個(gè)版本是內(nèi)容的新版本,而在(iii)中規(guī)定的另一版本的程序是內(nèi)容的舊版本。
6.根據(jù)以上權(quán)利要求中的任意一項(xiàng)所述的方法,其中所述轉(zhuǎn)換元素包括至少一個(gè)位移規(guī)則。
7.根據(jù)權(quán)利要求6所述的方法,其中所述位移規(guī)則為數(shù)字位移規(guī)則。
8.根據(jù)權(quán)利要求7所述的方法,其中所述數(shù)字位移規(guī)則為整數(shù)位移規(guī)則。
9.根據(jù)權(quán)利要求6至8中的任意一項(xiàng)所述的方法,其中所述位移規(guī)則是引用位移規(guī)則。
10.根據(jù)權(quán)利要求9所述的方法,其中所述至少一個(gè)引用位移規(guī)則與差異表相關(guān)聯(lián)。
11.根據(jù)權(quán)利要求10所述的方法,其中所述差異表至少基于與內(nèi)容的所述一個(gè)版本和內(nèi)容的其他版本相關(guān)聯(lián)的元數(shù)據(jù)。
12.根據(jù)權(quán)利要求11所述的方法,其中所述元數(shù)據(jù)為內(nèi)容描述數(shù)據(jù)。
13.根據(jù)權(quán)利要求12所述的方法,其中所述內(nèi)容描述數(shù)據(jù)是包括映像文件、符號(hào)表、調(diào)試表的組中的成員。
14.根據(jù)以上權(quán)利要求中的任意一項(xiàng)所述的方法,其中所述內(nèi)容包括計(jì)算機(jī)程序。
15.根據(jù)權(quán)利要求14所述的方法,其中所述程序是可執(zhí)行程序。
16.根據(jù)以上權(quán)利要求中的任意一項(xiàng)所述的方法,其中所述內(nèi)容包括數(shù)據(jù)。
17.根據(jù)以上權(quán)利要求中的任意一項(xiàng)所述的方法,在應(yīng)用于迭代時(shí)包括a)生成與在先前的迭代中獲得的經(jīng)修改的版本以及所述其他版本相關(guān)聯(lián)的轉(zhuǎn)換元素;b)生成經(jīng)修改的版本,該生成包括對(duì)在先前的迭代中獲得的經(jīng)修改版本應(yīng)用在(a)中獲得的轉(zhuǎn)換元素;c)生成緊湊更新包;該緊湊更新包包括復(fù)合轉(zhuǎn)換元素,以及基于至少在(b)中規(guī)定的經(jīng)修改版本和所述其他版本的修改增量,其中該復(fù)合轉(zhuǎn)換元素包括在到目前為止的所有迭代中生成的轉(zhuǎn)換元素;d)如果不滿足停止標(biāo)準(zhǔn),則進(jìn)行下一次迭代;否則,從所述迭代過程中生成的緊湊更新包當(dāng)中選擇最小的緊湊更新包。
18.根據(jù)權(quán)利要求17所述的方法,其中如果緊湊更新包比在先前的迭代中生成的緊湊更新包更大,則滿足所述停止標(biāo)準(zhǔn)。
19.根據(jù)以上權(quán)利要求中的任意一項(xiàng)所述的方法,用于對(duì)存儲(chǔ)在存儲(chǔ)裝置中的內(nèi)容進(jìn)行更新。
20.根據(jù)權(quán)利要求19所述的方法,其中所述存儲(chǔ)裝置與嵌入裝置相關(guān)聯(lián)。
21.根據(jù)權(quán)利要求20所述的方法,其中所述嵌入裝置是包括移動(dòng)電話、消費(fèi)者電子裝置的組中的成員。
22.根據(jù)權(quán)利要求19所述的方法,其中所述存儲(chǔ)裝置與計(jì)算機(jī)相關(guān)聯(lián)。
23.一種用于對(duì)內(nèi)容的舊版本進(jìn)行更新以生成內(nèi)容的新版本的方法,該方法包括(i)獲得緊湊更新包;所述緊湊更新包包括與所述舊版本和新版本相關(guān)聯(lián)的轉(zhuǎn)換元素;修改增量;以及前向更新或后向更新的指示;(ii)在前向更新指示的情況下a、生成經(jīng)修改的版本,該生成包括對(duì)所述舊版本應(yīng)用所述轉(zhuǎn)換元素;以及b、生成所述新版本,該生成包括對(duì)所述經(jīng)修改的版本應(yīng)用所述修改增量,(iii)在后向更新指示的情況下a、生成經(jīng)修改的版本,該生成包括對(duì)所述舊版本應(yīng)用所述修改增量;以及b、生成所述新版本,該生成包括對(duì)在(iii)(a)中規(guī)定的經(jīng)修改版本應(yīng)用所述轉(zhuǎn)換元素。
24.根據(jù)權(quán)利要求23所述的方法,其中所述轉(zhuǎn)換元素是復(fù)合轉(zhuǎn)換元素。
25.根據(jù)權(quán)利要求23所述的方法,其中所述(i)包括接收所述緊湊更新包。
26.根據(jù)權(quán)利要求23至25中的任意一項(xiàng)所述的方法,其中所述轉(zhuǎn)換元素包括至少一個(gè)位移規(guī)則。
27.根據(jù)權(quán)利要求26所述的方法,其中所述位移規(guī)則為數(shù)字位移規(guī)則。
28.根據(jù)權(quán)利要求27所述的方法,其中所述數(shù)字位移規(guī)則為整數(shù)位移規(guī)則。
29.根據(jù)權(quán)利要求26至28中的任意一項(xiàng)所述的方法,其中所述位移規(guī)則是引用位移規(guī)則。
30.根據(jù)權(quán)利要求29所述的方法,其中所述至少一個(gè)引用位移規(guī)則與差異表相關(guān)聯(lián)。
31.根據(jù)權(quán)利要求30所述的方法,其中所述差異表至少基于與內(nèi)容的所述一個(gè)版本和內(nèi)容的其他版本相關(guān)聯(lián)的元數(shù)據(jù)。
32.根據(jù)權(quán)利要求30所述的方法,其中所述元數(shù)據(jù)為內(nèi)容描述數(shù)據(jù)。
33.根據(jù)權(quán)利要求32所述的方法,其中所述內(nèi)容描述數(shù)據(jù)是包括映像文件、符號(hào)表、調(diào)試表的組中的成員。
34.根據(jù)權(quán)利要求23至33中的任意一項(xiàng)所述的方法,其中所述內(nèi)容包括計(jì)算機(jī)程序。
35.根據(jù)權(quán)利要求34所述的方法,其中所述程序是可執(zhí)行程序。
36.根據(jù)權(quán)利要求23至35中的任意一項(xiàng)所述的方法,其中所述內(nèi)容包括數(shù)據(jù)。
37.根據(jù)權(quán)利要求23至36中的任意一項(xiàng)所述的方法,用于對(duì)存儲(chǔ)在存儲(chǔ)裝置中的內(nèi)容進(jìn)行更新。
38.根據(jù)權(quán)利要求37所述的方法,其中所述存儲(chǔ)裝置與嵌入裝置相關(guān)聯(lián)。
39.根據(jù)權(quán)利要求38所述的方法,其中所述嵌入裝置是包括移動(dòng)電話、消費(fèi)者電子裝置的組中的成員。
40.根據(jù)權(quán)利要求37所述的方法,其中所述存儲(chǔ)裝置與計(jì)算機(jī)相關(guān)聯(lián)。
41.一種用于生成更新包以使得能夠?qū)Υ鎯?chǔ)在存儲(chǔ)裝置中的內(nèi)容的版本進(jìn)行更新的方法,該更新包使得能夠?qū)⑺鰞?nèi)容的舊版本更新為其新版本,該方法包括確定表示所述舊版本的引用條目中的被引用條目的地址的值;對(duì)所述舊版本中的被引用條目確定修改位移;以及設(shè)定整數(shù)位移規(guī)則,以使得能夠根據(jù)所述修改位移對(duì)所述引用條目進(jìn)行修改。
42.一種機(jī)器可讀的程序存儲(chǔ)裝置,其實(shí)際上包含有可由該機(jī)器執(zhí)行的指令程序,以執(zhí)行用于生成內(nèi)容的舊版本與內(nèi)容的新版本之間的緊湊更新包的方法步驟,該方法步驟包括(i)生成與所述舊版本和新版本相關(guān)聯(lián)的轉(zhuǎn)換元素;(ii)生成經(jīng)修改的版本,該生成包括對(duì)所述舊版本和新版本中的一個(gè)版本應(yīng)用所述轉(zhuǎn)換元素;(iii)生成所述緊湊更新包;該緊湊更新包包括所述轉(zhuǎn)換元素以及基于至少所述經(jīng)修改的版本和在(ii)中規(guī)定的所述一個(gè)版本以外的版本的修改增量。
43.一種機(jī)器可讀的程序存儲(chǔ)裝置,其實(shí)際上包含有可由該機(jī)器執(zhí)行的指令程序,以執(zhí)行用于對(duì)內(nèi)容的舊版本進(jìn)行更新以生成內(nèi)容的新版本的方法步驟,該方法步驟包括(i)獲得緊湊更新包;所述緊湊更新包包括與所述舊版本和新版本相關(guān)聯(lián)的轉(zhuǎn)換元素;修改增量;以及前向更新或后向更新的指示;(ii)在前向更新指示的情況下a)生成經(jīng)修改的版本,該生成包括對(duì)所述舊版本應(yīng)用所述轉(zhuǎn)換元素;以及b)生成所述新版本,該生成包括對(duì)所述經(jīng)修改的版本應(yīng)用所述修改增量。(iii)在后向更新指示的情況下a)生成經(jīng)修改的版本,該生成包括對(duì)所述舊版本應(yīng)用所述修改增量;以及b)生成所述新版本,該生成包括對(duì)在(iii)(a)中規(guī)定的經(jīng)修改的版本應(yīng)用所述轉(zhuǎn)換元素。
44.一種用于生成內(nèi)容的舊版本與內(nèi)容的新版本之間的緊湊更新包的系統(tǒng),該系統(tǒng)包括轉(zhuǎn)換元素生成器,用于生成與所述舊版本和新版本相關(guān)聯(lián)的轉(zhuǎn)換元素;經(jīng)修改版本生成器,用于生成經(jīng)修改的版本,該生成包括對(duì)所述舊版本和新版本中的一個(gè)版本應(yīng)用所述轉(zhuǎn)換元素;更新包生成器,用于生成所述緊湊更新包;該緊湊更新包包括所述轉(zhuǎn)換元素以及基于至少所述經(jīng)修改的版本和所述一個(gè)版本以外的版本的修改增量。
45.一種對(duì)內(nèi)容的舊版本進(jìn)行更新以生成內(nèi)容的新版本的系統(tǒng),該系統(tǒng)包括輸入模塊,被構(gòu)造用來獲得緊湊更新包;所述緊湊更新包包括與所述舊版本和新版本相關(guān)聯(lián)的轉(zhuǎn)換元素;修改增量;以及前向更新或后向更新的指示;處理器,被構(gòu)造用來在前向更新指示的情況下執(zhí)行a)生成經(jīng)修改的版本,該生成包括對(duì)所述舊版本應(yīng)用所述轉(zhuǎn)換元素;以及b)生成所述新版本,該生成包括對(duì)所述經(jīng)修改的版本應(yīng)用所述修改增量,或者在后向更新指示的情況下執(zhí)行a)生成經(jīng)修改的版本,該生成包括對(duì)所述舊版本應(yīng)用所述修改增量;以及b)生成所述新版本,該生成包括對(duì)所述經(jīng)修改的版本應(yīng)用所述轉(zhuǎn)換元素。
全文摘要
一種用于生成內(nèi)容的舊版本與內(nèi)容的新版本之間的緊湊更新包的系統(tǒng)。該系統(tǒng)包括轉(zhuǎn)換元素生成器,用于生成與舊版本和新版本相關(guān)聯(lián)的轉(zhuǎn)換元素;經(jīng)修改版本生成器,用于生成經(jīng)修改的版本,該生成包括對(duì)該舊版本應(yīng)用該轉(zhuǎn)換元素;更新包生成器,用于生成該緊湊更新包。該緊湊更新包包括該轉(zhuǎn)換元素以及基于該經(jīng)修改的版本和該新版本的修改增量。
文檔編號(hào)H03M7/30GK1826585SQ200480021372
公開日2006年8月30日 申請(qǐng)日期2004年6月23日 優(yōu)先權(quán)日2003年6月23日
發(fā)明者埃溫亞特·梅勒, 莎倫·皮萊格 申請(qǐng)人:雷德本德有限公司