一種基于二分法和md5校驗(yàn)的文件遠(yuǎn)程升級(jí)方法
【專利摘要】本發(fā)明一種基于二分法和MD5校驗(yàn)的文件遠(yuǎn)程升級(jí)方法,通過(guò)將升級(jí)服務(wù)器上的文件按照固定大小進(jìn)行分塊生成偶數(shù)等份組成的主塊和剩余部分組成尾塊,然后將主塊中的每個(gè)文件塊數(shù)據(jù)依次生成MD5校驗(yàn)值,之后將相鄰兩個(gè)塊的MD5校驗(yàn)值兩兩成對(duì)拼接成字符串再生成上一級(jí)MD5校驗(yàn)值,依次類(lèi)推,直到生成主塊最終的MD5校驗(yàn)值為止,將整個(gè)過(guò)程生成的MD5校驗(yàn)值逆向生成一棵主塊MD5校驗(yàn)樹(shù),最后對(duì)尾塊部分獨(dú)立生成MD5校驗(yàn)值。升級(jí)時(shí),將主塊的MD5校驗(yàn)樹(shù)和尾塊的MD5校驗(yàn)值發(fā)送給客戶端,客戶端按照相同的方式生成本地文件的主塊MD5校驗(yàn)樹(shù)和尾塊MD5校驗(yàn)值,并按照二分法依次進(jìn)行快速比對(duì),對(duì)MD5校驗(yàn)值不相等的文件塊進(jìn)行下載升級(jí)。
【專利說(shuō)明】一種基于二分法和MD5校驗(yàn)的文件遠(yuǎn)程升級(jí)方法
【背景技術(shù)】
[0001] 傳統(tǒng)的遠(yuǎn)程升級(jí)方法大都采用完整文件下載的方式,對(duì)于動(dòng)輒幾百Μ甚至幾 G的大 文件,由于文件的傳輸數(shù)據(jù)量較大,下載時(shí)間長(zhǎng),傳統(tǒng)方法適用性較差。特別是對(duì)于某些大 小不變,只是修正部分錯(cuò)誤數(shù)據(jù)的文件,進(jìn)行完整文件的下載既浪費(fèi)資源又費(fèi)事費(fèi)力。
[0002] 本發(fā)明一種基于二分法和MD5校驗(yàn)的文件遠(yuǎn)程升級(jí)方法,通過(guò)將本地文件和遠(yuǎn)程 文件劃分成固定大小的文件塊并生成MD5校驗(yàn)樹(shù),然后基于二分法快速比較,以達(dá)到快速升 級(jí)判斷和文件局部升級(jí)的目的,某些情況下能夠顯著減少數(shù)據(jù)傳輸量和升級(jí)等待時(shí)間。本 方法特別適用于對(duì)那些文件大小不變,只是進(jìn)行了局部數(shù)據(jù)修改的大文件升級(jí),對(duì)于大小 發(fā)生變化或者內(nèi)容改動(dòng)較大的文件,升級(jí)效果與傳統(tǒng)升級(jí)方法相同。
【發(fā)明內(nèi)容】
[0003] 本發(fā)明提出一種基于二分法和MD5校驗(yàn)的文件遠(yuǎn)程升級(jí)方法,以提升文件大小不 變,只是進(jìn)行了局部數(shù)據(jù)修改的大文件升級(jí)的升級(jí)效率。
[0004] 具體方案如下:一種基于二分法和MD5校驗(yàn)的文件遠(yuǎn)程升級(jí)方法,包括以下步驟:
[0005] S1、對(duì)升級(jí)服務(wù)器發(fā)布的待升級(jí)的文件生成升級(jí)屬性文件:
[0006] S11、將文件按固定大小分塊;
[0007] 假設(shè)待升級(jí)文件大小為Μ個(gè)字節(jié),分塊大小為Ν個(gè)字節(jié),則將文件分割成兩部分Ml 和M2;其中,Ml大小為小于等于Μ的能夠偶數(shù)倍整除N的最大整數(shù),稱之為主塊;M2的大小為 Μ-Μ1,位于文件的尾部,稱之為尾塊,其計(jì)算公式如下所示:
[0009]式中" L」"為向下取整運(yùn)算,"mod"為取余數(shù)運(yùn)算;按照上述公式計(jì)算出主塊的大 小Ml和尾塊的大小M2之后,將文件進(jìn)行分塊,主塊按照N大小進(jìn)行等分,尾塊獨(dú)立成塊;
[001 0] S12、構(gòu)建主塊MD5校驗(yàn)樹(shù)和尾塊MD5校驗(yàn)值:
[0011] S121、生成尾塊的MD5校驗(yàn)值;
[0012] S122,將主塊按照固定大小N進(jìn)行讀取,每讀取大小為N的數(shù)據(jù)生成一個(gè)MD5校驗(yàn) 值,依次生成所有
個(gè)MD5校驗(yàn)值;
[0013] S123、將主塊中相鄰的兩個(gè)MD5校驗(yàn)值字符串兩兩成對(duì)收尾相接拼接成字符串,對(duì) 拼接的字符串生成上一級(jí)的MD5校驗(yàn)值,并按照此拼接生成MD5校驗(yàn)值的方式向上逐層級(jí)重 復(fù)處理,直至剩下一個(gè)MD5校驗(yàn)值為止,最后剩下的MD5校驗(yàn)值稱之為主塊MD5校驗(yàn)值;
[0014] S124、將主塊生成的MD5校驗(yàn)值按照層級(jí)關(guān)系,構(gòu)建成MD5校樹(shù),主塊MD5校驗(yàn)值為 樹(shù)的根節(jié)點(diǎn);
[0015] S125、將主塊MD5校驗(yàn)值和尾塊的MD5校驗(yàn)值收尾相接,拼接成字符串生成最終文 件的MD5校驗(yàn)值;
[0016] S13、生成升級(jí)屬性文件,其中屬性包括分塊大小N、分塊個(gè)數(shù)C、文件MD5校驗(yàn)值、尾 塊大小M2、尾塊MD5校驗(yàn)值、主塊MD5校驗(yàn)樹(shù);
[0017] S2、客戶端向服務(wù)器端請(qǐng)求獲取升級(jí)屬性文件中的分塊大小N、分塊個(gè)數(shù)C、尾塊大 小M2以及文件MD5校驗(yàn)值;
[0018] S3、若升級(jí)服務(wù)器應(yīng)答失敗,則表示升級(jí)失敗或者無(wú)需升級(jí),升級(jí)結(jié)束;若升級(jí)服 務(wù)器應(yīng)答成功,則計(jì)算升級(jí)文件大小并與本地文件大小進(jìn)行比較,若文件大小不等,則從升 級(jí)服務(wù)器重新下載完整文件,下載完成之后執(zhí)行步驟S1按照S2中獲取到的分塊大小N生成 本地升級(jí)屬性文件,若文件大小相等則進(jìn)入步驟S4;
[0019] S4、判斷客戶端本地升級(jí)屬性文件是否存在,若本地升級(jí)屬性文件不存在,則執(zhí)行 步驟S1按照S2中獲取到的分塊大小N生成本地升級(jí)屬性文件,然后判斷本地升級(jí)屬性文件 中的分塊大小與服務(wù)器中的分塊大小是否相等,若分塊大小不相等,則執(zhí)行步驟S1按照S2 中獲取到的分塊大小N重新生成本地屬性文件。之后,比較本地升級(jí)屬性文件中的文件MD5 校驗(yàn)值與待升級(jí)的文件MD5校驗(yàn)值相等,若文件MD5校驗(yàn)值相等,則無(wú)需升級(jí),升級(jí)結(jié)束;若 文件校驗(yàn)值不相等,則進(jìn)入步驟S5;
[0020] S5、客戶端向服務(wù)端請(qǐng)求主塊MD5校驗(yàn)樹(shù)和尾塊MD5校驗(yàn)值。若服務(wù)器端應(yīng)答失敗, 則升級(jí)失敗,結(jié)束升級(jí)流程;若服務(wù)器端應(yīng)答成功,則根據(jù)返回結(jié)果重建主塊MD5校驗(yàn)樹(shù),采 用二分法與客戶端本地主塊MD5校驗(yàn)樹(shù)及進(jìn)行比對(duì),將MD5校驗(yàn)值不相等的文件塊的偏移地 址連同分塊大小N放入待升級(jí)塊列表中;比較尾塊的MD5校驗(yàn)值是否相同,若不同則將尾塊 大小及偏移地址加入到待升級(jí)塊列表中,其中尾塊的分塊大小為尾塊大小M2,其待升級(jí)塊 偏移地址的計(jì)算方式為:
[0021 ]尾塊的待升級(jí)塊偏移=分塊大小N*分塊個(gè)數(shù)C
[0022] 主塊MD5校驗(yàn)樹(shù)和尾塊MD5校驗(yàn)值比對(duì)完之后進(jìn)入步驟S6;
[0023] S6、若帶升級(jí)塊列表為空,則升級(jí)完成。否則,客戶端根據(jù)待升級(jí)塊列表中的文件 偏移地址和分塊大小,向升級(jí)服務(wù)器請(qǐng)求下載對(duì)應(yīng)的文件塊,按照偏移地址覆蓋寫(xiě)入到客 戶端本地文件的對(duì)應(yīng)偏移,待所有待升級(jí)塊列表中的塊全部更新完畢之后,則執(zhí)行步驟S1 按照S2中獲取到的分塊大小N生成本地升級(jí)屬性文件。
[0024] 其中,所述的將文件按固定大小分塊為將文件按照塊的大小劃分每個(gè)塊在文件中 所屬的文件起止地址。
[0025] 任選的,所述的主塊MD5校驗(yàn)樹(shù)的存儲(chǔ)結(jié)構(gòu)采用二叉樹(shù)的前序、中序、后續(xù)排序方 式中的任意一種進(jìn)行存儲(chǔ)。
[0026] 其中,所述的采用二分法與客戶端本地主塊MD5校驗(yàn)樹(shù)及進(jìn)行比對(duì),將比較后不同 文件塊的偏移地址連同分塊大小N放入待升級(jí)塊列表中具體步驟是:將重建的主塊MD5校驗(yàn) 樹(shù)與客戶端本地的MD5校驗(yàn)樹(shù)遍歷比較兩棵樹(shù)的對(duì)應(yīng)節(jié)點(diǎn)的MD5校驗(yàn)值,若結(jié)點(diǎn)的MD5校驗(yàn) 值相等,則跳過(guò)該節(jié)點(diǎn),繼續(xù)遍歷;若葉節(jié)點(diǎn)MD5校驗(yàn)值不相等,則將該節(jié)點(diǎn)標(biāo)記為待升級(jí)狀 態(tài);計(jì)算標(biāo)記為待升級(jí)狀態(tài)的節(jié)點(diǎn)對(duì)應(yīng)的塊在文件中的起始偏移地址,將偏移地址連同分 塊大小N放入待升級(jí)塊列表中,其中塊偏移地址=塊編號(hào)*分塊大小N,其中塊編號(hào)為主塊按 照分塊大小N進(jìn)行等分后,按一定順序開(kāi)始編號(hào),與MD5校驗(yàn)樹(shù)的葉節(jié)點(diǎn)一一對(duì)應(yīng)。
[0027] 任選的,所述的遍歷MD5校驗(yàn)樹(shù)的方式為前序遍歷、中序遍歷、后續(xù)遍歷中的任意 一種。
[0028] 任選的,所述的塊編號(hào)方式為從左到右或從右到左。
[0029]本發(fā)明一種基于二分法和MD5校驗(yàn)的大文件遠(yuǎn)程升級(jí)方法,通過(guò)將文件按照固定 大小進(jìn)行分塊生成主塊和尾塊,然后構(gòu)建由分塊大小、分塊個(gè)數(shù)、文件MD5校驗(yàn)值、尾塊大 小、尾塊MD5校驗(yàn)值、主塊MD5校驗(yàn)樹(shù)組成的升級(jí)屬性文件。升級(jí)時(shí),客戶端根據(jù)升級(jí)屬性文 件中的字段進(jìn)行升級(jí)判斷,并基于二分法對(duì)校驗(yàn)樹(shù)進(jìn)行快速比對(duì),確定待升級(jí)塊信息,最后 完成待升級(jí)塊的下載和覆蓋更新。該方法避免了傳統(tǒng)文件升級(jí)需要下載整個(gè)文件的不足, 特別適合對(duì)那些文件大小不變,只是進(jìn)行了局部數(shù)據(jù)修改的的大文件升級(jí),能夠有效減少 數(shù)據(jù)傳輸量和升級(jí)等待時(shí)間。而對(duì)于文件大小發(fā)生變化或者內(nèi)容變化較大的文件,該方法 也能達(dá)到升級(jí)的目的,其效果與傳統(tǒng)升級(jí)方法相同。
【附圖說(shuō)明】
[0030]圖1為本發(fā)明一實(shí)施例中對(duì)文件分塊不意圖;
[0031] 圖2為本發(fā)明一實(shí)施例中生成主塊和尾塊MD5校驗(yàn)值示意圖;
[0032] 圖3為本發(fā)明一實(shí)施例構(gòu)建主塊MD5校驗(yàn)樹(shù)示意圖;
[0033]圖4為本發(fā)明一實(shí)施例升級(jí)屬性文件結(jié)構(gòu)圖;
[0034]圖5為本發(fā)明一實(shí)施例步驟b)的主要流程圖;
[0035]圖6為本發(fā)明一實(shí)施例采用二分法比較主塊MD5校驗(yàn)樹(shù)的過(guò)程;
[0036] 圖7為本發(fā)明一實(shí)施例對(duì)不同節(jié)點(diǎn)對(duì)應(yīng)文件塊編號(hào)的示意圖;
[0037] 圖8為本發(fā)明一實(shí)施例步驟c)_步驟d)的主要流程。
【具體實(shí)施方式】
[0038] 為進(jìn)一步說(shuō)明各實(shí)施例,本發(fā)明提供有附圖。這些附圖為本發(fā)明揭露內(nèi)容的一部 分,其主要用以說(shuō)明實(shí)施例,并可配合說(shuō)明書(shū)的相關(guān)描述來(lái)解釋實(shí)施例的運(yùn)作原理。配合參 考這些內(nèi)容,本領(lǐng)域普通技術(shù)人員應(yīng)能理解其他可能的實(shí)施方式以及本發(fā)明的優(yōu)點(diǎn)?,F(xiàn)結(jié) 合附圖和【具體實(shí)施方式】對(duì)本發(fā)明進(jìn)一步說(shuō)明。
[0039] 本實(shí)施例包括對(duì)升級(jí)文件生成升級(jí)屬性文件的步驟以及升級(jí)文件的步驟,
[0040] 對(duì)升級(jí)服務(wù)器上的待升級(jí)文件生成升級(jí)屬性文件的步驟包括:
[0041 ] 1)、將文件按照固定大小進(jìn)行分塊:
[0042]假設(shè)待升級(jí)文件大小為Μ個(gè)字節(jié),分塊大小為N個(gè)字節(jié),則將文件分割成兩部分Ml 和M2。其中,Ml大小為小于Μ的能夠偶數(shù)倍整除N的整數(shù),稱之為"主塊";M2的大小為M-M1,位 于文件的尾部,稱之為"尾塊",其計(jì)算公式如下所示:
[0044]在上述公式中" L」"為向下取整運(yùn)算,
的取整數(shù)部分;"mod"為 取余數(shù)運(yùn)算,
-的整數(shù)部分除于2的余數(shù)。
[0045] 按照上述公式計(jì)算出主塊的大小Ml和尾塊的大小M2之后,結(jié)合圖1,示出了本實(shí)施 例文件分塊結(jié)構(gòu)示意圖,主塊按照N大小進(jìn)行等分,尾塊獨(dú)立成塊。這里的分塊并不是真的 將文件分割成幾個(gè)文件,而只是將文件按照塊的大小劃分每個(gè)塊在文件中所屬的文件起止 地址。
[0046] 文件分塊后,接下來(lái)要構(gòu)建主塊的MD5校驗(yàn)樹(shù)和尾塊MD5校驗(yàn)值。進(jìn)入步驟2)。
[0047] 2)、構(gòu)建主塊MD5校驗(yàn)樹(shù)和尾塊MD5校驗(yàn)值:
[0048]首先,先生成尾塊的MD5校驗(yàn)值;然后,將主塊按照固定大小N進(jìn)行讀取,每讀取大 小為N的數(shù)據(jù)生成一個(gè)MD5校驗(yàn)值,依次生成所有個(gè)MD5校驗(yàn)值,之后再將相鄰的兩個(gè)MD5校 驗(yàn)值字符串兩兩成對(duì)收尾相接拼接成字符串,對(duì)拼接的字符串生成上一級(jí)的MD5校驗(yàn)值,以 此類(lèi)推,直至剩下一個(gè)MD5校驗(yàn)值為止,結(jié)合圖2。最后剩下的位于最頂端的MD5校驗(yàn)值稱之 為主塊MD5校驗(yàn)值;
[0049]結(jié)合圖3將主塊生成的MD5校驗(yàn)值按照層級(jí)關(guān)系,構(gòu)建成MD5校樹(shù),主塊MD5校驗(yàn)值 為樹(shù)的根節(jié)點(diǎn);
[0050] 最后,將主塊MD5校驗(yàn)值和尾塊的MD5校驗(yàn)值收尾相接,拼接成字符串生成最終文 件的MD5校驗(yàn)值。
[0051] 3)、生成升級(jí)屬性文件:
[0052] 升級(jí)屬性文件保存著文件的升級(jí)信息,主要是用來(lái)判斷本地文件和遠(yuǎn)程文件的數(shù) 據(jù)是否相同,不同則需要進(jìn)行文件升級(jí)并觸發(fā)升級(jí)流程,相同則不需要進(jìn)行升級(jí)。結(jié)合圖4, 文件升級(jí)信息包括:分塊大小、分塊個(gè)數(shù)、文件MD5校驗(yàn)值、尾塊大小、尾塊MD5校驗(yàn)值、主塊 MD5校驗(yàn)樹(shù)幾部分組成。其中文件MD5校驗(yàn)值為主塊MD5校驗(yàn)樹(shù)根節(jié)點(diǎn)的MD5字符串與尾塊 MD5校驗(yàn)值字符串首尾拼接之后計(jì)算生成的MD5校驗(yàn)值。
[0053]本領(lǐng)域的相關(guān)技術(shù)人員應(yīng)該知道,上述結(jié)構(gòu)中,本實(shí)施例中主塊MD5校驗(yàn)樹(shù)的存儲(chǔ) 結(jié)構(gòu)采用二叉樹(shù)的前序方式進(jìn)行存儲(chǔ),而采用二叉樹(shù)的中序、后序排序進(jìn)行存儲(chǔ)也是可行 的,采取的存儲(chǔ)方式對(duì)于本發(fā)明的效果并無(wú)實(shí)質(zhì)性影響,只需在客戶端和服務(wù)端約定一致, 能夠正確還原樹(shù)結(jié)構(gòu)即可。
[0054]本實(shí)施例升級(jí)文件的主要流程如下:
[0055] a)、如果升級(jí)服務(wù)器有新的升級(jí)文件發(fā)布,則升級(jí)服務(wù)器執(zhí)行上述步驟1)到步驟 3)的處理流程,生成新的升級(jí)屬性文件;
[0056] b)、客戶端啟動(dòng)之后,向服務(wù)器端請(qǐng)求獲取升級(jí)屬性文件中的分塊大小N、分塊個(gè) 數(shù)C、尾塊大小M2以及文件MD5校驗(yàn)值。如果升級(jí)服務(wù)器應(yīng)答失敗,則表示升級(jí)失敗或者無(wú)需 升級(jí),升級(jí)結(jié)束;如果升級(jí)服務(wù)器應(yīng)答成功,則計(jì)算升級(jí)服務(wù)器的文件大小,與本地文件大 小進(jìn)行比較。如果文件大小不相等,則從升級(jí)服務(wù)器中重新下載完整文件,下載完成之后, 執(zhí)行步驟1)到步驟3)的處理流程,生成客戶端本地的升級(jí)屬性文件,升級(jí)結(jié)束;如果文件大 小相等,則判斷客戶端本地升級(jí)屬性文件是否存在。如果本地升級(jí)屬性文件不存在,則根據(jù) 步驟1)到步驟3)的處理流程,生成本地升級(jí)屬性文件。之后,判斷本地升級(jí)屬性文件中的分 塊大小與服務(wù)器中的分塊大小是否相等。如果分塊大小不相等,則根據(jù)步驟1)到步驟3重新 生成本地屬性文件。之后,比較本地升級(jí)屬性文件中的文件MD5校驗(yàn)值與升級(jí)服務(wù)器的文件 MD5校驗(yàn)值相等,如果文件校驗(yàn)值相等,則無(wú)需升級(jí),升級(jí)結(jié)束;如果文件校驗(yàn)值不相等,則 進(jìn)入步驟c)。結(jié)合圖5,示出了該步驟的主要流程;
[0057] c)、客戶端向服務(wù)端請(qǐng)求主塊MD5校驗(yàn)樹(shù)和尾塊MD5校驗(yàn)值。服務(wù)端應(yīng)答失敗,則升 級(jí)失敗,結(jié)束升級(jí)流程;服務(wù)端應(yīng)答成功,則根據(jù)返回結(jié)果重建主塊MD5校驗(yàn)樹(shù),同時(shí)與客戶 端本地的MD5校驗(yàn)樹(shù)按照前序遍歷順序依次比較兩棵樹(shù)的對(duì)應(yīng)節(jié)點(diǎn)的MD5校驗(yàn)值,如果某結(jié) 點(diǎn)的MD5校驗(yàn)值相等,則跳過(guò)該節(jié)點(diǎn),繼續(xù)遍歷。如果碰到MD5校驗(yàn)值不相等的頁(yè)節(jié)點(diǎn),則將 該節(jié)點(diǎn)標(biāo)記為待升級(jí)狀態(tài)。結(jié)合圖6示出了該比較過(guò)程,灰色節(jié)點(diǎn)為MD5校驗(yàn)值不相同的節(jié) 點(diǎn),下圖整個(gè)過(guò)程總共進(jìn)行了 10次比較,對(duì)應(yīng)編號(hào)為1~10,而J1、J2、J3對(duì)應(yīng)的塊就是被標(biāo) 記為待升級(jí)的文件塊。
[0058] 樹(shù)遍歷比較完畢后,計(jì)算標(biāo)記為待升級(jí)狀態(tài)的節(jié)點(diǎn)對(duì)應(yīng)的塊在文件中的起始偏移 地址,將偏移地址連同分塊大小N放入待升級(jí)塊列表中。其中塊偏移地址=塊編號(hào)*分塊大 小N,其中塊編號(hào)為主塊按照分塊大小N進(jìn)行等分后,從左到右從0開(kāi)始編號(hào),與MD5校驗(yàn)樹(shù)的 葉節(jié)點(diǎn)從左到右一一對(duì)應(yīng),該流程如圖7所示。
[0059] 最后比較尾塊的MD5校驗(yàn)值是否相同,不同則加入到帶升級(jí)塊列表中。尾塊的待升 級(jí)塊偏移地址為分塊大小N*分塊個(gè)數(shù)C,其塊大小為尾塊大小M2。進(jìn)入步驟d);
[0000]本實(shí)施例基于二分法對(duì)MD5校驗(yàn)樹(shù)進(jìn)行快速比對(duì),在遍歷比對(duì)時(shí)采用前序遍歷的 方式比對(duì),本領(lǐng)域的相關(guān)技術(shù)人員應(yīng)當(dāng)知道的是,遍歷MD5校驗(yàn)樹(shù)的方式還可以是中序遍歷 或后序遍歷,對(duì)于遍歷的方式并不作任何的限定,而對(duì)于文件塊的編號(hào)也可以是從右到左, 亦不做任何的限定。
[0061] d)、如果待升級(jí)塊列表為空,則升級(jí)完成。否則,客戶端根據(jù)待升級(jí)塊列表中的文 件偏移地址和分塊大小,向升級(jí)服務(wù)器請(qǐng)求下載對(duì)應(yīng)的文件塊,按照偏移地址覆蓋寫(xiě)入到 客戶端本地文件的對(duì)應(yīng)偏移,待所有待升級(jí)塊列表中的塊全部更新完畢之后。執(zhí)行步驟1) 到步驟3)流程,重新生成升級(jí)屬性文件。升級(jí)完成。步驟C)-步驟d)的流程圖大致如圖8所 不。
[0062] 盡管結(jié)合優(yōu)選實(shí)施方案具體展示和介紹了本發(fā)明,但所屬領(lǐng)域的技術(shù)人員應(yīng)該明 白,在不脫離所附權(quán)利要求書(shū)所限定的本發(fā)明的精神和范圍內(nèi),在形式上和細(xì)節(jié)上可以對(duì) 本發(fā)明做出各種變化,均為本發(fā)明的保護(hù)范圍。
【主權(quán)項(xiàng)】
1. 一種基于二分法和MD5校驗(yàn)的文件遠(yuǎn)程升級(jí)方法,包括以下步驟: 51、 對(duì)升級(jí)服務(wù)器發(fā)布的待升級(jí)的文件生成升級(jí)屬性文件: 511、 將文件按固定大小分塊; 假設(shè)待升級(jí)文件大小為Μ個(gè)字節(jié),分塊大小為N個(gè)字節(jié),則將文件分割成兩部分Ml和M2; 其中,Ml的大小為不大于Μ的能夠偶數(shù)倍整除N的最大整數(shù),稱之為主塊;M2的大小為M-M1, 位于文件的尾部,稱之為尾塊,其計(jì)算公式如下所示:式中" L」"為向下取整運(yùn)算,"mod"為取余數(shù)運(yùn)算;按照上述公式計(jì)算出主塊的大小Ml 和尾塊的大小M2之后,將文件進(jìn)行分塊,主塊按照N大小進(jìn)行等分,尾塊獨(dú)立成塊; 512、 構(gòu)建主塊MD5校驗(yàn)樹(shù)和尾塊MD5校驗(yàn)值: 5121、 生成尾塊的MD5校驗(yàn)值; 5122、 將主塊按照固定大小N進(jìn)行讀取,每讀取大小為N的數(shù)據(jù)生成一個(gè)MD5校驗(yàn)值,依 Μ 次生成所有i個(gè)MD5校驗(yàn)值; _N _ 5123、 將主塊中相鄰的兩個(gè)MD5校驗(yàn)值字符串兩兩成對(duì)收尾相接拼接成字符串,對(duì)拼接 的字符串生成上一級(jí)的MD5校驗(yàn)值,并按照此拼接生成MD5校驗(yàn)值的方式向上逐層級(jí)重復(fù)處 理,直至剩下一個(gè)MD5校驗(yàn)值為止,最后剩下的MD5校驗(yàn)值稱之為主塊MD5校驗(yàn)值; 5124、 將主塊生成的MD5校驗(yàn)值按照層級(jí)關(guān)系,構(gòu)建成MD5校樹(shù),主塊MD5校驗(yàn)值為樹(shù)的 根節(jié)點(diǎn); 5125、 將主塊MD5校驗(yàn)值和尾塊的MD5校驗(yàn)值收尾相接,拼接成字符串生成最終文件的 MD5校驗(yàn)值; 513、 生成升級(jí)屬性文件,其中屬性包括分塊大小N、分塊個(gè)數(shù)C、文件MD5校驗(yàn)值、尾塊大 小M2、尾塊MD5校驗(yàn)值、主塊MD5校驗(yàn)樹(shù); 52、 客戶端向服務(wù)器端請(qǐng)求獲取升級(jí)屬性文件中的分塊大小N、分塊個(gè)數(shù)C、尾塊大小M2 以及文件MD5校驗(yàn)值; 53、 若升級(jí)服務(wù)器應(yīng)答失敗,則表示升級(jí)失敗或者無(wú)需升級(jí),升級(jí)結(jié)束;若升級(jí)服務(wù)器 應(yīng)答成功,則計(jì)算升級(jí)文件大小并與本地文件大小進(jìn)行比較,若文件大小不等,則從升級(jí)服 務(wù)器重新下載完整文件,下載完成之后執(zhí)行步驟S1按照S2中獲取到的分塊大小N生成本地 升級(jí)屬性文件,若文件大小相等則進(jìn)入步驟S4; 54、 判斷客戶端本地升級(jí)屬性文件是否存在,若本地升級(jí)屬性文件不存在,則執(zhí)行步驟 S1按照S2中獲取到的分塊大小N生成本地升級(jí)屬性文件,然后判斷本地升級(jí)屬性文件中的 分塊大小與服務(wù)器中的分塊大小是否相等,若分塊大小不相等,則執(zhí)行步驟S1按照S2中獲 取到的分塊大小N重新生成本地屬性文件;之后,比較本地升級(jí)屬性文件中的文件MD5校驗(yàn) 值與待升級(jí)的文件MD5校驗(yàn)值相等,若文件MD5校驗(yàn)值相等,則無(wú)需升級(jí),升級(jí)結(jié)束;若文件 校驗(yàn)值不相等,則進(jìn)入步驟S5; 55、 客戶端向服務(wù)端請(qǐng)求主塊MD5校驗(yàn)樹(shù)和尾塊MD5校驗(yàn)值;若服務(wù)器端應(yīng)答失敗,則升 級(jí)失敗,結(jié)束升級(jí)流程;若服務(wù)器端應(yīng)答成功,則根據(jù)返回結(jié)果重建主塊MD5校驗(yàn)樹(shù),采用二 分法與客戶端本地主塊MD5校驗(yàn)樹(shù)進(jìn)行比對(duì),將MD5校驗(yàn)值不相等的文件塊的偏移地址連同 分塊大小N放入待升級(jí)塊列表中;比較尾塊的MD5校驗(yàn)值是否相同,若不同則將尾塊大小及 偏移地址加入到待升級(jí)塊列表中,其中尾塊分塊大小為尾塊大小M2,其待升級(jí)塊偏移地址 計(jì)算方式為: 尾塊的待升級(jí)塊偏移=分塊大小N*分塊個(gè)數(shù)C 主塊MD5校驗(yàn)樹(shù)和尾塊MD5校驗(yàn)值比對(duì)完之后進(jìn)入步驟S6; S6、若帶升級(jí)塊列表為空,則升級(jí)完成;否則,客戶端根據(jù)待升級(jí)塊列表中的文件偏移 地址和分塊大小,向升級(jí)服務(wù)器請(qǐng)求下載對(duì)應(yīng)的文件塊,按照偏移地址覆蓋寫(xiě)入到客戶端 本地文件的對(duì)應(yīng)偏移,待所有待升級(jí)塊列表中的塊全部更新完畢之后,則執(zhí)行步驟S1按照 S2中獲取到的分塊大小N生成本地升級(jí)屬性文件。2. 根據(jù)權(quán)利要求1所述的方法,其特征在于:所述的將文件按固定大小分塊為將文件按 照塊的大小劃分每個(gè)塊在文件中所屬的文件起止地址。3. 根據(jù)權(quán)利要求1所述的方法,其特征在于:所述的主塊MD5校驗(yàn)樹(shù)的存儲(chǔ)結(jié)構(gòu)采用二 叉樹(shù)的前序、中序、后續(xù)排序方式中的任意一種進(jìn)行存儲(chǔ)。4. 根據(jù)權(quán)利要求1所述的方法,其特征在于:所述的采用二分法與客戶端本地主塊MD5 校驗(yàn)樹(shù)及進(jìn)行比對(duì),將比較后不同文件塊的偏移地址連同分塊大小N放入待升級(jí)塊列表中 具體步驟是:將重建的主塊MD5校驗(yàn)樹(shù)與客戶端本地的MD5校驗(yàn)樹(shù)遍歷比較兩棵樹(shù)的對(duì)應(yīng)節(jié) 點(diǎn)的MD5校驗(yàn)值,若結(jié)點(diǎn)的MD5校驗(yàn)值相等,則跳過(guò)該節(jié)點(diǎn),繼續(xù)遍歷;若葉節(jié)點(diǎn)MD5校驗(yàn)值不 相等,則將該節(jié)點(diǎn)標(biāo)記為待升級(jí)狀態(tài);計(jì)算標(biāo)記為待升級(jí)狀態(tài)的節(jié)點(diǎn)對(duì)應(yīng)的塊在文件中的 起始偏移地址,將偏移地址連同分塊大小N放入待升級(jí)塊列表中,其中塊偏移地址=塊編 號(hào)*分塊大小N,其中塊編號(hào)為主塊按照分塊大小N進(jìn)行等分后,按一定順序開(kāi)始編號(hào),與MD5 校驗(yàn)樹(shù)的葉節(jié)點(diǎn)一一對(duì)應(yīng)。5. 根據(jù)權(quán)利要求4所述的方法,其特征在于:所述的遍歷MD5校驗(yàn)樹(shù)的方式為前序遍歷、 中序遍歷、后續(xù)遍歷中的任意一種。6. 根據(jù)權(quán)利要求4所述的方法,其特征在于;所述的塊編號(hào)方式為從左到右或從右到 左。
【文檔編號(hào)】G06F9/445GK105867934SQ201610227087
【公開(kāi)日】2016年8月17日
【申請(qǐng)日】2016年4月13日
【發(fā)明人】王國(guó)清, 劉志芳, 崔躍
【申請(qǐng)人】廈門(mén)雅迅網(wǎng)絡(luò)股份有限公司