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