最新的毛片基地免费,国产国语一级毛片,免费国产成人高清在线电影,中天堂国产日韩欧美,中国国产aa一级毛片,国产va欧美va在线观看,成人不卡在线

基于文件分塊的文件修改方法、單文件同步方法及裝置制造方法

文檔序號:7810304閱讀:170來源:國知局
基于文件分塊的文件修改方法、單文件同步方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種基于文件分塊的文件修改方法、同步方法及裝置,文件修改裝置包括:劃分模塊用于采用定長的分塊方法將文件劃分為多個數(shù)據(jù)塊,并在文件頭中記錄所有數(shù)據(jù)塊的分塊信息;修改模塊用于在文件中增加字節(jié)或者刪除字節(jié)后,更新文件頭中的分塊信息;單文件同步裝置包括:接收模塊用于接收文件分塊裝置對文件B修改后生成的文件頭SB;差異信息生成模塊用于將本地文件A的文件頭SA和SB比對,生成SA和SB的差異信息;同步模塊用于將所述差異信息發(fā)送至文件分塊裝置,并根據(jù)文件分塊裝置返回的重構(gòu)本地文件A所需的數(shù)據(jù)信息更新本地文件A。本發(fā)明能夠減少文件修改對文件分塊的影響,從而在同步文件時,減少傳輸?shù)臄?shù)據(jù)量。
【專利說明】基于文件分塊的文件修改方法、單文件同步方法及裝置

【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)據(jù)同步技術(shù),具體涉及一種基于文件分塊的文件修改方法及裝置、 單文件同步方法及裝置。

【背景技術(shù)】
[0002] 云存儲的理念在于允許用戶隨時隨地地訪問存儲在云端的文件,并且允許用戶對 文件進行修改和刪除等操作。因此,需要及時地同步用戶端和服務(wù)器的文件,保證文件的一 致性。
[0003] 目前的單文件同步方法主要是rsync算法。假設(shè)服務(wù)器上的文件為A,客戶端的文 件為B。文件A和文件B非常相似。這兩個文件同步的步驟為:
[0004] 1)用戶端將文件B分割成連續(xù)不重疊的固定大小數(shù)據(jù)塊K,最后一個塊的大小可 能會<k ;
[0005] 2)用戶端為每一個塊計算校驗值,生成一個32位的弱滾動校驗和一個128位的 MD4校驗;
[0006] 3)用戶端將校驗值發(fā)送給服務(wù)器;
[0007] 4)服務(wù)器通過以相同的方式,對文件A切塊,并計算校驗值;
[0008] 5)服務(wù)器比對文件A和用戶端發(fā)來的文件B的校驗信息,并生成差異編碼信息; [0009] 6)服務(wù)器給用戶端發(fā)送差異編碼信息,同時發(fā)送重構(gòu)文件A的指令;
[0010] 7)用戶端將根據(jù)差異編碼信息和文件B重構(gòu)文件A。
[0011] Rsync是應(yīng)用較廣的文件同步方法,但是由于它采用的是定長的文件切割方法,因 此,在文件中1個字節(jié)的變化會帶來大量切片的變化,存在同步數(shù)據(jù)量過大的問題。


【發(fā)明內(nèi)容】

[0012] 本發(fā)明需要解決的技術(shù)問題是提供一種基于文件分塊的文件修改方法及裝置、單 文件同步方法及裝置,以減少文件修改對文件分塊的影響,從而在同步文件時,減少傳輸?shù)?數(shù)據(jù)量。
[0013] 為了解決上述技術(shù)問題,本發(fā)明提供了一種基于文件分塊的文件修改方法,包 括:
[0014] 以K為數(shù)據(jù)塊的固定長度,采用定長的分塊方法將所述文件劃分為多個數(shù)據(jù)塊, 并在文件頭中記錄所有數(shù)據(jù)塊的分塊信息,所述分塊信息包括:數(shù)據(jù)塊的總塊數(shù)以及每個 數(shù)據(jù)塊的偏移值、長度、校驗值、索引編號以及實際存儲的位置鏈接;
[0015] 當(dāng)在文件中增加字節(jié)時,如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長度小 于等于K,則合成新的第i個數(shù)據(jù)塊;如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長 度大于K甚至nK,則從增加字節(jié)處,連續(xù)截取長為K的數(shù)據(jù)塊,直至最后一個數(shù)據(jù)塊的長度 小于K,i、k、η、Κ均為大于0的正整數(shù),至此文件分塊結(jié)束;
[0016] 當(dāng)在文件中刪除字節(jié)時,如果在第i個數(shù)據(jù)塊中刪除k字節(jié),不會刪除至下一數(shù)據(jù) 塊,則將刪除k字節(jié)后的數(shù)據(jù)塊作為第i個數(shù)據(jù)塊;如果在第i個數(shù)據(jù)塊中刪除k字節(jié),會 刪除至下一數(shù)據(jù)塊甚至刪除至第j個數(shù)據(jù)塊,j>i>〇,則將刪除字節(jié)起始位置之前的數(shù)據(jù)塊 作為第i個數(shù)據(jù)塊,將刪除字節(jié)至第j個數(shù)據(jù)塊的結(jié)束位置之后的數(shù)據(jù)塊作為第i+ι個數(shù) 據(jù)塊,至此文件分塊結(jié)束;
[0017] 當(dāng)在文件中增加字節(jié)或者刪除字節(jié)時,在文件分塊結(jié)束后,更新文件頭中的分塊 信息。
[0018] 進一步地,所述當(dāng)在文件中增加字節(jié)時,在文件分塊結(jié)束后,更新文件頭中的分塊 信息,包括:
[0019] 如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長度小于等于K,合成新的第i 個數(shù)據(jù)塊后,重新計算該數(shù)據(jù)塊的校驗值和長度,并修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值 +k,并記錄在文件頭中;
[0020] 如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長度大于K甚至nK,則在文件分 塊結(jié)束后,計算所述第i個數(shù)據(jù)塊的校驗值,更新其數(shù)據(jù)塊長度為Κ,計算新增數(shù)據(jù)塊的校 驗值、偏移值、長度,并修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值+k,并修改各個數(shù)據(jù)塊的索引 編號,記錄在文件頭中。
[0021] 進一步地,所述當(dāng)在文件中刪除字節(jié)時,所述在文件分塊結(jié)束后,更新頭文件中的 分塊信息,包括:
[0022] 如果在第i個數(shù)據(jù)塊中刪除k字節(jié),不會刪除至下一數(shù)據(jù)塊,則重新計算該數(shù)據(jù)塊 的校驗值和長度,修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值_k,并記錄在文件頭中;
[0023] 如果在第i個數(shù)據(jù)塊中刪除k字節(jié),會刪除至下一數(shù)據(jù)塊甚至刪除至第j個數(shù)據(jù) 塊,j>i>〇,則在文件分塊結(jié)束后,計算所述第i個數(shù)據(jù)塊的校驗值,更新其數(shù)據(jù)塊長度為刪 除字節(jié)起始位置之前的數(shù)據(jù)塊長度,將刪除字節(jié)至第j個數(shù)據(jù)塊的結(jié)束位置之后的數(shù)據(jù)塊 作為第i + Ι個數(shù)據(jù)塊,更新所述第i + Ι個數(shù)據(jù)塊的偏移值為刪除字節(jié)的起始位置、更新其數(shù) 據(jù)塊長度為自刪除字節(jié)的起始位置起至第j個數(shù)據(jù)塊結(jié)束的長度_k,并計算所述第i + Ι個 數(shù)據(jù)塊的校驗值,修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值_k,并修改后續(xù)數(shù)據(jù)塊的索引編號, 記錄在文件頭中。
[0024] 為了解決上述技術(shù)問題,本發(fā)明還提供了一種基于如上所述的文件修改方法的單 文件同步方法,包括:
[0025] 第一裝置接收到第二裝置對文件B增加 k字節(jié)或刪除k字節(jié)后生成的文件頭SB ;
[0026] 第一裝置將本地文件A的文件頭SA和SB進行比對,生成S A和SB的差異信息;
[0027] 第一裝置將所述差異信息發(fā)送至第二裝置;
[0028] 第二裝置根據(jù)所述差異信息和修改后的文件B,向第一裝置返回重構(gòu)所述本地文 件A所需的數(shù)據(jù)信息,第一裝置根據(jù)所述數(shù)據(jù)信息更新所述本地文件A ;
[0029] 其中,所述第一裝置為服務(wù)器,所述第二裝置為客戶端;或者,所述第一裝置為客 戶端,所述第二裝置為服務(wù)器。
[0030] 進一步地,對于增加字節(jié),所述差異信息包括:第i個數(shù)據(jù)塊的分塊信息,或者,第 i個數(shù)據(jù)塊和新增數(shù)據(jù)塊的分塊信息,以及后續(xù)數(shù)據(jù)塊的分塊信息和數(shù)據(jù)塊的總塊數(shù);
[0031] 對于刪除字節(jié),所述差異信息包括:第i個數(shù)據(jù)塊的分塊信息,或者,第i個數(shù)據(jù)塊 和第i+Ι個數(shù)據(jù)塊的分塊信息,以及后續(xù)數(shù)據(jù)塊的分塊信息和數(shù)據(jù)塊的總塊數(shù)。
[0032] 進一步地,對于增加字節(jié),如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長度 小于等于K,則所述第i個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值和長度,所述后 續(xù)數(shù)據(jù)塊的分塊信息包括:后續(xù)數(shù)據(jù)塊的偏移值;如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該 數(shù)據(jù)塊的長度大于K甚至nK,則所述第i個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值 和長度,所述新增數(shù)據(jù)塊的分塊信息包括:新增數(shù)據(jù)塊的校驗值、長度、偏移值和索引編號, 所述后續(xù)數(shù)據(jù)塊的分塊信息包括:后續(xù)數(shù)據(jù)塊的偏移值和索引編號;
[0033] 對于刪除字節(jié),如果在第i個數(shù)據(jù)塊中刪除k字節(jié),不會刪除至下一數(shù)據(jù)塊,所述 第i個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值和長度,所述后續(xù)數(shù)據(jù)塊的分塊信息 包括:后續(xù)數(shù)據(jù)塊的偏移值;如果在第i個數(shù)據(jù)塊中刪除k字節(jié),會刪除至下一數(shù)據(jù)塊甚至 刪除至第j個數(shù)據(jù)塊,所述第i個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值和長度, 所述第i+Ι個數(shù)據(jù)塊的分塊信息包括:第i+Ι個數(shù)據(jù)塊的校驗值、長度、偏移值和索引編號, 所述后續(xù)數(shù)據(jù)塊的分塊信息包括:后續(xù)數(shù)據(jù)塊的偏移值和索引編號。
[0034] 進一步地,所述第一裝置將本地文件A的頭文件SA和SB進行比對,生成S A和SB的 差異信息,包括:
[0035] 根據(jù)SA和SB計算文件B總數(shù)據(jù)塊減去文件A總數(shù)據(jù)塊的差值N ;
[0036] 從兩個文件的第一個數(shù)據(jù)塊開始比對,直到找到第一個校驗值不同的兩個數(shù)據(jù) 塊;
[0037] 如果N = 0,則記錄文件B的該數(shù)據(jù)塊的分塊信息以及后續(xù)數(shù)據(jù)塊的分塊信息;
[0038] 如果N為正整數(shù),則記錄文件B的該數(shù)據(jù)塊、后續(xù)N個數(shù)據(jù)塊以及第N個數(shù)據(jù)塊之 后的數(shù)據(jù)塊的分塊信息;
[0039] 如果N為負整數(shù),則記錄文件B的該數(shù)據(jù)塊、其后第(-N+1)個數(shù)據(jù)塊及其后續(xù)的 數(shù)據(jù)塊的分塊信息。
[0040] 進一步地,當(dāng)?shù)谝谎b置與第二裝置完成同步后,第一裝置根據(jù)本地文件A的文件 頭SA中記錄的所有數(shù)據(jù)塊的長度以及數(shù)據(jù)塊總數(shù),計算一個數(shù)據(jù)塊的長度平均值,如果所 述數(shù)據(jù)塊的長度平均值小于預(yù)設(shè)閾值,則所述第一裝置對所述本地文件A以K為一個數(shù)據(jù) 塊的長度重新分塊,并通知第二裝置以相同的方式對文件B重新分塊,并計算校驗值,生成 新的s A和SB。
[0041] 為了解決上述技術(shù)問題,本發(fā)明還提供了一種基于文件分塊的文件修改裝置,包 括:
[0042] 劃分模塊,用于以K為數(shù)據(jù)塊的固定長度,采用定長的分塊方法將所述文件劃分 為多個數(shù)據(jù)塊,并在文件頭中記錄所有數(shù)據(jù)塊的分塊信息,所述分塊信息包括:數(shù)據(jù)塊的總 塊數(shù)以及每個數(shù)據(jù)塊的偏移值、長度、校驗值、索引編號以及實際存儲的位置鏈接;
[0043] 修改模塊,用于當(dāng)在文件中增加字節(jié)時,如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該 數(shù)據(jù)塊的長度小于等于K,則合成新的第i個數(shù)據(jù)塊;如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后, 該數(shù)據(jù)塊的長度大于K甚至nK,則從增加字節(jié)處,連續(xù)截取長為K的數(shù)據(jù)塊,直至最后一個 數(shù)據(jù)塊的長度小于K,i、k、η、Κ均為大于等于1的整數(shù),至此文件分塊結(jié)束;
[0044] 當(dāng)在文件中刪除字節(jié)時,如果在第i個數(shù)據(jù)塊中刪除k字節(jié),不會刪除至下一數(shù)據(jù) 塊,則將刪除k字節(jié)后的數(shù)據(jù)塊作為第i個數(shù)據(jù)塊;如果在第i個數(shù)據(jù)塊中刪除k字節(jié),會 刪除至下一數(shù)據(jù)塊甚至刪除至第j個數(shù)據(jù)塊,j>i>〇,則將刪除字節(jié)起始位置之前的數(shù)據(jù)塊 作為第i個數(shù)據(jù)塊,將刪除字節(jié)至第j個數(shù)據(jù)塊的結(jié)束位置之后的數(shù)據(jù)塊作為第i+ι個數(shù) 據(jù)塊,至此文件分塊結(jié)束;
[0045] 當(dāng)在文件中增加字節(jié)或者刪除字節(jié)時,在文件分塊結(jié)束后,更新頭文件中的分塊 信息;
[0046] 發(fā)送模塊,用于將更新的頭文件發(fā)送至單文件同步裝置。
[0047] 進一步地,所述修改模塊,用于當(dāng)在文件中增加字節(jié)時,在文件分塊結(jié)束后,更新 頭文件中的分塊信息,包括:
[0048] 如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長度小于等于K,合成新的第i 個數(shù)據(jù)塊后,重新計算該數(shù)據(jù)塊的校驗值和長度,并修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值 +k,并記錄在文件頭中;
[0049] 如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長度大于K甚至nK,則在文件分 塊結(jié)束后,計算所述第i個數(shù)據(jù)塊的校驗值,更新其數(shù)據(jù)塊長度為Κ,計算新增數(shù)據(jù)塊的校 驗值、偏移值、長度,并修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值+k,并修改各個數(shù)據(jù)塊的索引 編號,記錄在頭文件中;
[0050] 所述修改模塊,用于當(dāng)在文件中刪除字節(jié)時,所述在文件分塊結(jié)束后,更新頭文件 中的分塊信息,包括:
[0051] 如果在第i個數(shù)據(jù)塊中刪除k字節(jié),不會刪除至下一數(shù)據(jù)塊,則重新計算該數(shù)據(jù)塊 的校驗值和長度,修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值_k,并記錄在頭文件中;
[0052] 如果在第i個數(shù)據(jù)塊中刪除k字節(jié),會刪除至下一數(shù)據(jù)塊甚至刪除至第j個數(shù)據(jù) 塊,j>i>〇,則在文件分塊結(jié)束后,計算所述第i個數(shù)據(jù)塊的校驗值,更新其數(shù)據(jù)塊長度為刪 除字節(jié)起始位置之前的數(shù)據(jù)塊長度,將刪除字節(jié)至第j個數(shù)據(jù)塊的結(jié)束位置之后的數(shù)據(jù)塊 作為第i+Ι個數(shù)據(jù)塊,更新所述第i+Ι個數(shù)據(jù)塊的偏移值為刪除字節(jié)的起始位置、更新其數(shù) 據(jù)塊長度為自刪除字節(jié)的起始位置起至第j個數(shù)據(jù)塊結(jié)束的長度_k,并計算所述第i+Ι個 數(shù)據(jù)塊的校驗值,修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值_k,并修改后續(xù)數(shù)據(jù)塊的索引編號, 記錄在頭文件中。
[0053] 為了解決上述技術(shù)問題,本發(fā)明還提供了一種基于如上所述的文件修改裝置的單 文件同步裝置,包括:
[0054] 接收模塊,用于接收文件分塊裝置對文件B增加 k字節(jié)或刪除k字節(jié)后生成的文 件頭SB,還用于接收所述文件分塊裝置返回重構(gòu)所述本地文件A所需的數(shù)據(jù)信息;
[0055] 差異信息生成模塊,用于將本地文件A的頭文件SA和SB進行比對,生成S A和SB的 差異?目息;
[0056] 同步模塊,用于將所述差異信息發(fā)送至所述文件分塊裝置,并根據(jù)所述文件分塊 裝置返回的重構(gòu)所述本地文件Α所需的數(shù)據(jù)信息更新所述本地文件Α。
[0057] 進一步地,對于增加字節(jié),所述差異信息包括:第i個數(shù)據(jù)塊的分塊信息,或者,第 i個數(shù)據(jù)塊和新增數(shù)據(jù)塊的分塊信息,以及后續(xù)數(shù)據(jù)塊的分塊信息和數(shù)據(jù)塊的總塊數(shù);
[0058] 對于刪除字節(jié),所述差異信息包括:第i個數(shù)據(jù)塊的分塊信息,或者,第i個數(shù)據(jù)塊 和第i+Ι個數(shù)據(jù)塊的分塊信息,以及后續(xù)數(shù)據(jù)塊的分塊信息和數(shù)據(jù)塊的總塊數(shù)。
[0059] 進一步地,對于增加字節(jié),如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長度 小于等于K,則所述第i個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值和長度,所述后 續(xù)數(shù)據(jù)塊的分塊信息包括:后續(xù)數(shù)據(jù)塊的偏移值;如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該 數(shù)據(jù)塊的長度大于K甚至nK,則所述第i個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值 和長度,所述新增數(shù)據(jù)塊的分塊信息包括:新增數(shù)據(jù)塊的校驗值、長度、偏移值和索引編號, 所述后續(xù)數(shù)據(jù)塊的分塊信息包括:后續(xù)數(shù)據(jù)塊的偏移值和索引編號;
[0060] 對于刪除字節(jié),如果在第i個數(shù)據(jù)塊中刪除k字節(jié),不會刪除至下一數(shù)據(jù)塊,所述 第i個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值和長度,所述后續(xù)數(shù)據(jù)塊的分塊信息 包括:后續(xù)數(shù)據(jù)塊的偏移值;如果在第i個數(shù)據(jù)塊中刪除k字節(jié),會刪除至下一數(shù)據(jù)塊甚至 刪除至第j個數(shù)據(jù)塊,所述第i個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值和長度, 所述第i+Ι個數(shù)據(jù)塊的分塊信息包括:第i+Ι個數(shù)據(jù)塊的校驗值、長度、偏移值和索引編號, 所述后續(xù)數(shù)據(jù)塊的分塊信息包括:后續(xù)數(shù)據(jù)塊的偏移值和索引編號。
[0061] 進一步地,所述差異信息生成模塊,用于將本地文件A的頭文件SA和SB進行比對, 生成S A和SB的差異信息,包括:
[0062] 根據(jù)SA和SB計算文件B總數(shù)據(jù)塊減去文件A總數(shù)據(jù)塊的差值N ;
[0063] 從兩個文件的第一個數(shù)據(jù)塊開始比對,直到找到第一個校驗值不同的兩個數(shù)據(jù) 塊;
[0064] 如果N = 0,則記錄文件B的該數(shù)據(jù)塊的分塊信息以及后續(xù)數(shù)據(jù)塊的分塊信息; [0065] 如果N為正整數(shù),則記錄文件B的該數(shù)據(jù)塊、后續(xù)N個數(shù)據(jù)塊以及第N個數(shù)據(jù)塊之 后的數(shù)據(jù)塊的分塊信息;
[0066] 如果N為負整數(shù),則記錄文件B的該數(shù)據(jù)塊、其后第(-N+1)個數(shù)據(jù)塊及其后續(xù)的 數(shù)據(jù)塊的分塊信息。
[0067] 為了解決上述技術(shù)問題,本發(fā)明還提供了一種單文件同步系統(tǒng),包括:如上所述的 文件修改裝置和如上所述的單文件同步裝置;
[0068] 其中,所述文件修改裝置為服務(wù)器,所述單文件同步裝置為客戶端;或者,所述文 件修改裝置為客戶端,所述單文件同步裝置為服務(wù)器。
[0069] 與現(xiàn)有技術(shù)相比,本發(fā)明實施例提供的文件分塊方法及裝置、文件同步方法及裝 置,具有以下有益效果:
[0070] 1)對文件的修改只影響增加或刪除字節(jié)位置附近的數(shù)據(jù)塊信息,因此,對文件切 片影響較小,在同步文件時,只需要更新增加或刪除字節(jié)位置附近的數(shù)據(jù)塊的信息,傳輸?shù)?文件內(nèi)容也相應(yīng)減少;2)文件分塊大小不會無限制大,系統(tǒng)設(shè)計人員可根據(jù)系統(tǒng)的承受能 力設(shè)計K值,以平衡管理復(fù)雜性和文件傳輸代價;3)杜絕了大量文件碎片。

【專利附圖】

【附圖說明】
[0071] 圖1是現(xiàn)有技術(shù)中文件A和文件B的組成示意圖;
[0072] 圖2是實施例中文件分塊方法的流程圖;
[0073] 圖3是實施例中基于上述文件分塊方法的單文件同步方法的流程圖;
[0074] 圖4是實施例中一種單文件同步系統(tǒng)的結(jié)構(gòu)圖。

【具體實施方式】
[0075] 為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,下文中將結(jié)合附圖對本發(fā)明 的實施例進行詳細說明。需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中 的特征可以相互任意組合。
[0076] 實施例:
[0077] 本實施例中包括兩個裝置,其中,第一裝置為服務(wù)器,第二裝置為客戶端;或者,第 一裝置為客戶端,第二裝置為服務(wù)器,本實施例的前提是第一裝置和第二裝置上同時存在 一個文件,同步算法的目標(biāo)在于保持兩個裝置的文件的一致,同時要求第二裝置和第一裝 置的數(shù)據(jù)塊傳輸量最小。約定第一裝置上的文件為A,第二裝置的文件為B。系統(tǒng)為文件A 維護文件分塊信息為SA,文件B的分塊信息為SB。文件A和文件B的組成如圖1所示,文件 頭head,也即5 4和SB,包含了數(shù)據(jù)塊的總塊數(shù)以及所有數(shù)據(jù)塊的分塊信息,即對于每一個數(shù) 據(jù)塊,需記錄數(shù)據(jù)塊的初始字節(jié)的偏移值(offset)、數(shù)據(jù)塊長度、數(shù)據(jù)塊的校驗值、索引編 號以及實際存儲的位置鏈接(系統(tǒng)借助于該鏈接可獲取數(shù)據(jù)塊的詳細內(nèi)容),dbi表示第i 個數(shù)據(jù)塊。初始狀態(tài)下,SA和SB是一致的,如果在第一裝置或第二裝置對文件進行了更改, 就涉及到3 4和SB的同步問題,S卩如果在客戶端對文件進行了修改,則服務(wù)器端需進行同步, 如果在服務(wù)器端對文件進行了修改,則客戶端需進行同步。
[0078] 在文件增量同步算法的設(shè)計中,需要盡可能減少重復(fù)數(shù)據(jù)傳輸,即盡量不傳輸文 件A和文件B的相同部分。但是在Rsync算法中,定長的文件切塊方法使得文件中一個字 節(jié)的增減都會帶來大量數(shù)據(jù)塊的改變。為此,本實施例提供了一種文件分塊方法,如圖2所 示,以對第二裝置的文件進行修改為例,包括以下步驟:
[0079] S101 :以K為數(shù)據(jù)塊的固定長度,采用定長的分塊方法將所述文件劃分為多個數(shù) 據(jù)塊,并在文件頭中記錄所有數(shù)據(jù)塊的分塊信息,所述分塊信息包括:數(shù)據(jù)塊的總塊數(shù)以及 每個數(shù)據(jù)塊的偏移值、長度、校驗值、索引編號以及實際存儲的位置鏈接;
[0080] S102 :第二裝置對文件進行修改;
[0081] 對文件的修改包括了替換、增加和刪除。替換可理解為用等量字節(jié)的內(nèi)容去替換 原有的內(nèi)容,因此,對文件的切塊方式不產(chǎn)生影響。所以,本發(fā)明只考慮對文件增加和刪除 字節(jié)的情況。
[0082] 當(dāng)在文件中刪除字節(jié)時,如果在第i個數(shù)據(jù)塊中刪除k字節(jié),不會刪除至下一數(shù)據(jù) 塊,則將刪除k字節(jié)后的數(shù)據(jù)塊作為第i個數(shù)據(jù)塊;如果在第i個數(shù)據(jù)塊中刪除k字節(jié),會 刪除至下一數(shù)據(jù)塊甚至刪除至第j個數(shù)據(jù)塊,j>i>〇,則將刪除字節(jié)起始位置之前的數(shù)據(jù)塊 作為第i個數(shù)據(jù)塊,將刪除字節(jié)至第j個數(shù)據(jù)塊的結(jié)束位置之后的數(shù)據(jù)塊作為第i+ι個數(shù) 據(jù)塊,至此文件分塊結(jié)束;
[0083] 當(dāng)在文件中增加字節(jié)或者刪除字節(jié)時,在文件分塊結(jié)束后,更新文件頭中的分塊 信息。
[0084] 其中,當(dāng)在文件中增加字節(jié)時,在文件分塊結(jié)束后,更新文件頭中的分塊信息,包 括:
[0085] 如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長度小于等于K,合成新的第i 個數(shù)據(jù)塊后,重新計算該數(shù)據(jù)塊的校驗值和長度,并修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值 +k,并記錄在文件頭中;
[0086] 如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長度大于K甚至nK,則在文件分 塊結(jié)束后,計算所述第i個數(shù)據(jù)塊的校驗值,更新其數(shù)據(jù)塊長度為Κ,計算新增數(shù)據(jù)塊的校 驗值、偏移值、長度,并修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值+k,并修改各個數(shù)據(jù)塊的索引 編號,記錄在文件頭中。
[0087] 在一個應(yīng)用示例中,假設(shè)增加的字節(jié)的首位為距離文件頭部offset處,長度為k, 且offset^ = offset〈 = offseti+lengthj即,在第i個數(shù)據(jù)塊中增加字節(jié)),則存在以下 情況:
[0088] a)若lengthi+K = K,則意味著dbi在擴展了 k個字節(jié)后,仍然未達到數(shù)據(jù)塊的最 大長度。因此,新增加的k個字節(jié)與原有的第i個數(shù)據(jù)塊dbi組合成新的數(shù)據(jù)塊,并通報給 head,由head重新計算dbi的校驗值以及后續(xù)數(shù)據(jù)塊的offset值,即原數(shù)據(jù)塊的偏移值+k。
[0089] b)若lengthi+kMi,則意味著dbi在擴展了 k個字節(jié)后,已經(jīng)達到了數(shù)據(jù)塊的最大 長度,則繼續(xù)判斷:dbi+1
[0090] i) lengthi+lengthw+K = 2K,則意味著可將dbi和dbi+1以及新增加的k個字節(jié), 組合成2個數(shù)據(jù)塊,因此,優(yōu)先從off seh至off setjk的文件塊中,截取長為K的文件塊, 并記為dbi,從offseti+K至offseti+k的文件內(nèi)容記為db i+1 ;同時,通知文件頭head更改 相應(yīng)的數(shù)據(jù)塊的分塊信息,參見a);
[0091] ii) lengthi+lengthi^+kWK,意味著dbi、dbi+1以及新增加的k個字節(jié)將超過2個 數(shù)據(jù)塊的長度。因此,優(yōu)先從off seh至off setjk的文件塊中,截取長為K的文件塊,并標(biāo) 識為dbi ;然后,從off setjK至off setjk的文件塊中,截取長為K的文件塊,標(biāo)識為dbi+1, 從offseti+ZK至offsetjk的文件塊中,繼續(xù)以K為單位,對文件塊進行切片,直至最后一 個塊的長度小于K,記為dbp文件分塊結(jié)束后,更新head中的分片信息,即計算所述第i個 數(shù)據(jù)塊的校驗值,更新其數(shù)據(jù)塊大小為K,計算新增數(shù)據(jù)塊的校驗值、數(shù)據(jù)塊偏移值、數(shù)據(jù)塊 大小,并修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值+k,并修改各個數(shù)據(jù)塊的索引編號,記錄在文 件頭中。
[0092] 上述還有一種情況沒有討論到,即dbi為文件的最后一個數(shù)據(jù)塊,也即用戶對文件 的操作為在文件末尾增加 k字節(jié)的內(nèi)容,這類情況可參考ii)。
[0093] 其中,當(dāng)在文件中刪除字節(jié)時,所述在文件分塊結(jié)束后,更新文件頭中的分塊信 息,包括:
[0094] 如果在第i個數(shù)據(jù)塊中刪除k字節(jié),不會刪除至下一數(shù)據(jù)塊,則重新計算該數(shù)據(jù)塊 的校驗值和長度,修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值_k,并記錄在文件頭中;
[0095] 如果在第i個數(shù)據(jù)塊中刪除k字節(jié),會刪除至下一數(shù)據(jù)塊甚至刪除至第j個數(shù)據(jù) 塊,j>i>〇,則在文件分塊結(jié)束后,計算所述第i個數(shù)據(jù)塊的校驗值,更新其數(shù)據(jù)塊長度為刪 除字節(jié)起始位置之前的數(shù)據(jù)塊長度,將刪除字節(jié)至第j個數(shù)據(jù)塊的結(jié)束位置之后的數(shù)據(jù)塊 作為第i+Ι個數(shù)據(jù)塊,更新所述第i+Ι個數(shù)據(jù)塊的偏移值為刪除字節(jié)的起始位置、更新其數(shù) 據(jù)塊長度為自刪除字節(jié)的起始位置起至第j個數(shù)據(jù)塊結(jié)束的長度-k,并計算所述第i+Ι個 數(shù)據(jù)塊的校驗值,修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值-k,并修改后續(xù)數(shù)據(jù)塊的索引編號, 記錄在文件頭中。
[0096] 在一個應(yīng)用示例中,假設(shè)刪除的字節(jié)的首位為距離文件頭部offset處,長度為k, 且offset^ = offset〈 = offseti+lengthi (即,在第i個數(shù)據(jù)塊中刪除字節(jié))。刪除字節(jié) 時的處理原則是:盡量減少對數(shù)據(jù)塊切分方式的改變。因此,刪除字節(jié)的處理步驟如下:
[0097] a)若k〈 = lengthi-Orffset-offseti)則意味著用戶對文件的修改僅改變了第i 個數(shù)據(jù)塊dbi,對文件的其他分塊不產(chǎn)生影響。因此,僅需要head更新第i個數(shù)據(jù)塊的校驗 信息及后續(xù)數(shù)據(jù)塊的偏移值,即〇ffseti+1_k ;
[0098] b)如果 lengthy (offset - offset^〈 = k〈 = lengthy (offset -ofTsetJ+lengthiq,改變了第i和i+1這兩個數(shù)據(jù)塊dbi、dbi+1,為了不影響分塊,dbi的數(shù) 據(jù)塊的起始位置還是offset^長度變?yōu)閛ffset - offset^ ;dbi+1的起始位置變?yōu)閛ffset,長 度變?yōu)閘engthi+lengthi+foffset - offset^ -k,隨后數(shù)據(jù)塊的偏移值都減去k ;
[0099] 此時,塊數(shù)還是沒有變,即沒有刪去數(shù)據(jù)塊,也就是說,索引的個數(shù)沒有變,因此, head僅需要更新dbi的校驗信息、數(shù)據(jù)塊大小,dbi+1的校驗信息、偏移值和數(shù)據(jù)塊大小,以 及后續(xù)數(shù)據(jù)塊的偏移值。
[0100] c)否則意味著需要刪除多個數(shù)據(jù)塊。因此,自offset開始,刪除至第j個數(shù)據(jù)塊, 其中j滿足以下條件:
[0101] lengthy (offset -offsetj) + (lengthi+1+lengthi+2+··· +lengthJ_1) < = k〈= lengthy (offset - offsetj) + (lengthi+1+lengthi+2+···+lengthj) ;j> = i+2 ;
[0102] 對于第j個數(shù)據(jù)塊,刪除自offset」至讓-[16叩1:11廠((^861:-offsetj) + (lengthi+1+lengthi+2+··· +lengthJ_1)的字節(jié)。
[0103] 同時,通知head刪除數(shù)據(jù)塊i+1至j的相關(guān)信息,更新dbi和dbj的校驗信息,并 修改隨后的數(shù)據(jù)塊的offset信息為:原數(shù)據(jù)塊偏移值-k。
[0104] I:匕如,j = i+2 ;滿足:
[0105] lengthj-(offset - offsetj)+lengthi+1< = k< = lengthj- (offset -offsetj) +lengthi+1+lengthi+2,
[0106] 對于第i個數(shù)據(jù)塊(同上),dbi的數(shù)據(jù)塊的起始位置還是offset,長度變?yōu)?offset - offsetj ;
[0107] 對于第j個數(shù)據(jù)塊,起始位置為offset,長度變?yōu)閘engthy (offset -offsetj)+lengthi+1+lengthi+2-k ;
[0108] 此時的數(shù)據(jù)塊會少1個,也就是說索引會發(fā)生改變,刪除字節(jié)后的第j個數(shù)據(jù)塊 作為第i+Ι個數(shù)據(jù)塊,隨后的數(shù)據(jù)塊的索引編號也發(fā)生相應(yīng)改變,隨后的數(shù)據(jù)塊的起始位 置-k。
[0109] 增加或者刪除字節(jié)后,依據(jù)上述方法,會生成新的head信息,即SB,系統(tǒng)將S B發(fā)送 給第一裝置,由此進入了第一裝置的同步階段。
[0110] 如圖3所示,本實施例提供了一種基于上述文件分塊方法的單文件同步方法,包 括以下步驟:
[0111] S201 :第一裝置接收到第二裝置對文件B增加 k字節(jié)或刪除k字節(jié)生成的文件頭 SB;
[0112] S202 :第一裝置比對本地文件A的文件頭SA和SB,生成SA和SB的差異信息;
[0113] S203 :第一裝置將所述差異信息發(fā)送至第二裝置;
[0114] S204 :第二裝置根據(jù)所述差異信息和修改后的文件B,向第一裝置返回重構(gòu)所述 本地文件A所需的數(shù)據(jù)信息;
[0115] S205 :第一裝置根據(jù)所述數(shù)據(jù)信息更新所述本地文件A。
[0116] 其中,所述第一裝置為服務(wù)器,所述第二裝置為客戶端;或者,所述第一裝置為客 戶端,所述第二裝置為服務(wù)器。
[0117] 其中,對于增加字節(jié),所述差異信息包括:第i個數(shù)據(jù)塊的分塊信息,或者,第i個 數(shù)據(jù)塊和新增數(shù)據(jù)塊的分塊信息,以及后續(xù)數(shù)據(jù)塊的分塊信息和數(shù)據(jù)塊的總塊數(shù);
[0118] 對于刪除字節(jié),所述差異信息包括:第i個數(shù)據(jù)塊的分塊信息,或者,第i個數(shù)據(jù)塊 和第i+Ι個數(shù)據(jù)塊的分塊信息,以及后續(xù)數(shù)據(jù)塊的分塊信息和數(shù)據(jù)塊的總塊數(shù)。
[0119] 具體地,對于增加字節(jié),如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長度小 于等于K,則所述第i個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值和長度,所述后續(xù) 數(shù)據(jù)塊的分塊信息包括:后續(xù)數(shù)據(jù)塊的偏移值;如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù) 據(jù)塊的長度大于K甚至nK,則所述第i個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值 和長度,所述新增數(shù)據(jù)塊的分塊信息包括:新增數(shù)據(jù)塊的校驗值、長度、偏移值和索引編號, 所述后續(xù)數(shù)據(jù)塊的分塊信息包括:后續(xù)數(shù)據(jù)塊的偏移值和索引編號;
[0120] 對于刪除字節(jié),如果在第i個數(shù)據(jù)塊中刪除k字節(jié),不會刪除至下一數(shù)據(jù)塊,所述 第i個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值和長度,所述后續(xù)數(shù)據(jù)塊的分塊信息 包括:后續(xù)數(shù)據(jù)塊的偏移值;如果在第i個數(shù)據(jù)塊中刪除k字節(jié),會刪除至下一數(shù)據(jù)塊甚至 刪除至第j個數(shù)據(jù)塊,所述第i個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值和長度, 所述第i+Ι個數(shù)據(jù)塊的分塊信息包括:第i+Ι個數(shù)據(jù)塊的校驗值、長度、偏移值和索引編號, 所述后續(xù)數(shù)據(jù)塊的分塊信息包括:后續(xù)數(shù)據(jù)塊的偏移值和索引編號。
[0121] 在步驟S202中,所述第一裝置將本地文件A的頭文件SA和SB進行比對,生成5 4和 SB的差異信息,包括:
[0122] 根據(jù)SA和SB計算文件B總數(shù)據(jù)塊減去文件A總數(shù)據(jù)塊的差值N ;
[0123] 從兩個文件的第一個數(shù)據(jù)塊開始比對,直到找到第一個校驗值不同的兩個數(shù)據(jù) 塊;
[0124] 如果N = 0,則記錄文件B的該數(shù)據(jù)塊的分塊信息以及后續(xù)數(shù)據(jù)塊的分塊信息(對 應(yīng)于增加或刪除字節(jié)而沒有影響數(shù)據(jù)塊分塊個數(shù)的情況);
[0125] 如果N為正整數(shù),則記錄文件B的該數(shù)據(jù)塊、后續(xù)N個數(shù)據(jù)塊以及第N個數(shù)據(jù)塊之 后的數(shù)據(jù)塊的分塊信息(對應(yīng)于增加字節(jié)后增加了數(shù)據(jù)塊的情況,該數(shù)據(jù)塊對應(yīng)第i個數(shù) 據(jù)塊,后續(xù)N個數(shù)據(jù)塊對應(yīng)新增數(shù)據(jù)塊);
[0126] 如果N為負整數(shù),則記錄文件B的該數(shù)據(jù)塊、其后第(-N+1)個數(shù)據(jù)塊及其后續(xù)的 數(shù)據(jù)塊的分塊信息(對應(yīng)于刪除字節(jié)后減少數(shù)據(jù)塊的情況,該數(shù)據(jù)塊對應(yīng)第i個數(shù)據(jù)塊,其 后第(-N+1)個數(shù)據(jù)塊對應(yīng)第i+Ι個數(shù)據(jù)塊)。
[0127] 在步驟S204中,第二裝置接收到上述差異信息后,根據(jù)所述差異信息和修改后的 文件B,向第一裝置返回重構(gòu)所述本地文件A所需的數(shù)據(jù)信息,例如,對于校驗信息不同的 數(shù)據(jù)塊,傳輸相應(yīng)的數(shù)據(jù)塊內(nèi)容的指示;對于新增加的數(shù)據(jù)塊,傳輸新增的數(shù)據(jù)塊內(nèi)容;對 于缺失的數(shù)據(jù)塊,刪除相應(yīng)的數(shù)據(jù)塊。這里與現(xiàn)有技術(shù)中服務(wù)器對客戶端的修改進行同步 的方法相同,此處不再贅述。
[0128] 作為一種優(yōu)選的方式,為了減少文件切片碎片,本實施例設(shè)置定期的文件重切塊 操作。當(dāng)?shù)谝谎b置與第二裝置完成同步后,第一裝置根據(jù)本地文件A的文件頭S A中記錄的 所有數(shù)據(jù)塊的長度以及數(shù)據(jù)塊總數(shù),計算一個數(shù)據(jù)塊的長度平均值,如果所述數(shù)據(jù)塊的長 度平均值小于預(yù)設(shè)閾值,則所述第一裝置對所述本地文件A以K為一個數(shù)據(jù)塊的長度重新 分塊,并通知第二裝置以相同的方式對文件B重新分塊,并計算校驗值,生成新的SA和SB。
[0129] 由于刪除字節(jié)時,不會重新進行文件切割。因此,優(yōu)選地,本實施例可以選擇在增 加字節(jié)時進行文件碎片檢查。用戶增加了字節(jié)時,當(dāng)?shù)谝谎b置端與用戶端完成同步后,第 一裝置讀取根據(jù)S A中的記錄,計算一個數(shù)據(jù)塊的長度平均值,如果過低,則表示文件碎片較 多。此時,第一裝置和第二裝置均將對文件A和文件B重新分塊,并計算校驗值,生成新的 3&和&。分塊過程中,以K為數(shù)據(jù)塊大小,只有最后一個切塊的大小會小于K。由于重切塊 發(fā)生于文件同步之后,因此,新生成的3 4和SB是一致的。
[0130] 若以第一裝置對文件修改為例,與上述方式是類似的,只是兩個執(zhí)行的裝置互換。
[0131] 如圖4所示,本實施例提供了一種單文件同步系統(tǒng),包括:基于文件分塊的文件修 改裝置(即上文提到的第二裝置)和基于文件修改裝置的單文件同步裝置(即上文提到的 第一裝置),其中:
[0132] 所述單文件同步裝置為服務(wù)器,所述文件分塊裝置為客戶端;或者,所述單文件同 步裝置為客戶端,所述文件分塊裝置為服務(wù)器。
[0133] 文件分塊裝置,包括:
[0134] 劃分模塊,用于以K為數(shù)據(jù)塊的固定長度,采用定長的分塊方法將所述文件劃分 為多個數(shù)據(jù)塊,并在文件頭中記錄所有數(shù)據(jù)塊的分塊信息,所述分塊信息包括:數(shù)據(jù)塊的總 塊數(shù)以及每個數(shù)據(jù)塊的偏移值、長度、校驗值、索引編號以及實際存儲的位置鏈接;
[0135] 修改模塊,用于當(dāng)在文件中增加字節(jié)時,如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該 數(shù)據(jù)塊的長度小于等于K,則合成新的第i個數(shù)據(jù)塊;如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后, 該數(shù)據(jù)塊的長度大于K甚至nK,則從增加字節(jié)處,連續(xù)截取長為K的數(shù)據(jù)塊,直至最后一個 數(shù)據(jù)塊的長度小于K,i、k、η、Κ均為大于等于1的整數(shù),至此文件分塊結(jié)束;
[0136] 當(dāng)在文件中刪除字節(jié)時,如果在第i個數(shù)據(jù)塊中刪除k字節(jié),不會刪除至下一數(shù)據(jù) 塊,則將刪除k字節(jié)后的數(shù)據(jù)塊作為第i個數(shù)據(jù)塊;如果在第i個數(shù)據(jù)塊中刪除k字節(jié),會 刪除至下一數(shù)據(jù)塊甚至刪除至第j個數(shù)據(jù)塊,j>i>〇,則將刪除字節(jié)起始位置之前的數(shù)據(jù)塊 作為第i個數(shù)據(jù)塊,將刪除字節(jié)至第j個數(shù)據(jù)塊的結(jié)束位置之后的數(shù)據(jù)塊作為第i+ι個數(shù) 據(jù)塊,至此文件分塊結(jié)束;
[0137] 當(dāng)在文件中增加字節(jié)或者刪除字節(jié)時,在文件分塊結(jié)束后,更新頭文件中的分塊 信息。
[0138] 發(fā)送模塊,用于將生成的頭文件發(fā)送至單文件同步裝置。
[0139] 其中,所述修改模塊,用于當(dāng)在文件中增加字節(jié)時,在文件分塊結(jié)束后,更新文件 頭中的分塊信息,包括:
[0140] 如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長度小于等于K,合成新的第i 個數(shù)據(jù)塊后,重新計算該數(shù)據(jù)塊的校驗值和長度,并修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值 +k,并記錄在文件頭中;
[0141] 如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長度大于K甚至nK,則在文件分 塊結(jié)束后,計算所述第i個數(shù)據(jù)塊的校驗值,更新其數(shù)據(jù)塊長度為Κ,計算新增數(shù)據(jù)塊的校 驗值、偏移值、長度,并修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值+k,并修改各個數(shù)據(jù)塊的索引 編號,記錄在文件頭中;
[0142] 所述修改模塊,用于當(dāng)在文件中刪除字節(jié)時,所述在文件分塊結(jié)束后,更新頭文件 中的分塊信息,包括:
[0143] 如果在第i個數(shù)據(jù)塊中刪除k字節(jié),不會刪除至下一數(shù)據(jù)塊,則重新計算該數(shù)據(jù)塊 的校驗值和長度,修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值_k,并記錄在頭文件中;
[0144] 如果在第i個數(shù)據(jù)塊中刪除k字節(jié),會刪除至下一數(shù)據(jù)塊甚至刪除至第j個數(shù)據(jù) 塊,j>i>〇,則在文件分塊結(jié)束后,計算所述第i個數(shù)據(jù)塊的校驗值,更新其數(shù)據(jù)塊長度為刪 除字節(jié)起始位置之前的數(shù)據(jù)塊長度,將刪除字節(jié)至第j個數(shù)據(jù)塊的結(jié)束位置之后的數(shù)據(jù)塊 作為第i+Ι個數(shù)據(jù)塊,更新所述第i+Ι個數(shù)據(jù)塊的偏移值為刪除字節(jié)的起始位置、更新其數(shù) 據(jù)塊長度為自刪除字節(jié)的起始位置起至第j個數(shù)據(jù)塊結(jié)束的長度-k,并計算所述第i+Ι個 數(shù)據(jù)塊的校驗值,修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值-k,并修改后續(xù)數(shù)據(jù)塊的索引編號, 記錄在文件頭中。
[0145] 其中,單文件同步裝置,包括:
[0146] 接收模塊,用于接收文件分塊裝置對文件B增加 k字節(jié)或刪除k字節(jié)后生成的文 件頭SB,還用于接收所述文件分塊裝置返回重構(gòu)本地文件A所需的數(shù)據(jù)信息;
[0147] 差異信息生成模塊,用于比對本地文件A的文件頭SA和SB,生成S A和SB的差異信 息;
[0148] 同步模塊,用于將所述差異信息發(fā)送至文件分塊裝置,并,根據(jù)所述文件分塊裝置 返回的重構(gòu)本地文件A所需的數(shù)據(jù)信息更新所述本地文件A。
[0149] 其中,對于增加字節(jié),所述差異信息包括:第i個數(shù)據(jù)塊的分塊信息,或者,第i個 數(shù)據(jù)塊和新增數(shù)據(jù)塊的分塊信息,以及后續(xù)數(shù)據(jù)塊的分塊信息和數(shù)據(jù)塊的總塊數(shù);
[0150] 對于刪除字節(jié),所述差異信息包括:第i個數(shù)據(jù)塊的分塊信息,或者,第i個數(shù)據(jù)塊 和第i+ι個數(shù)據(jù)塊的分塊信息,以及后續(xù)數(shù)據(jù)塊的分塊信息和數(shù)據(jù)塊的總塊數(shù)。
[0151] 其中,對于增加字節(jié),如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長度小于 等于K,則所述第i個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值和長度,所述后續(xù)數(shù) 據(jù)塊的分塊信息包括:后續(xù)數(shù)據(jù)塊的偏移值;如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù) 塊的長度大于K甚至nK,則所述第i個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值和 長度,所述新增數(shù)據(jù)塊的分塊信息包括:新增數(shù)據(jù)塊的校驗值、長度、偏移值和索引編號,所 述后續(xù)數(shù)據(jù)塊的分塊信息包括:后續(xù)數(shù)據(jù)塊的偏移值和索引編號;
[0152] 對于刪除字節(jié),如果在第i個數(shù)據(jù)塊中刪除k字節(jié),不會刪除至下一數(shù)據(jù)塊,所述 第i個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值和長度,所述后續(xù)數(shù)據(jù)塊的分塊信息 包括:后續(xù)數(shù)據(jù)塊的偏移值;如果在第i個數(shù)據(jù)塊中刪除k字節(jié),會刪除至下一數(shù)據(jù)塊甚至 刪除至第j個數(shù)據(jù)塊,所述第i個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值和長度, 所述第i+Ι個數(shù)據(jù)塊的分塊信息包括:第i+Ι個數(shù)據(jù)塊的校驗值、長度、偏移值和索引編號, 所述后續(xù)數(shù)據(jù)塊的分塊信息包括:后續(xù)數(shù)據(jù)塊的偏移值和索引編號。
[0153] 其中,所述差異信息生成模塊,用于將本地文件A的頭文件SA和SB進行比對,生成 3&和S B的差異信息,包括:
[0154] 根據(jù)SA和SB計算文件B總數(shù)據(jù)塊減去文件A總數(shù)據(jù)塊的差值N ;
[0155] 從兩個文件的第一個數(shù)據(jù)塊開始比對,直到找到第一個校驗值不同的兩個數(shù)據(jù) 塊;
[0156] 如果N = 0,則記錄文件B的該數(shù)據(jù)塊的分塊信息以及后續(xù)數(shù)據(jù)塊的分塊信息(對 應(yīng)于增加或刪除字節(jié)而沒有影響數(shù)據(jù)塊分塊個數(shù)的情況);
[0157] 如果N為正整數(shù),則記錄文件B的該數(shù)據(jù)塊、后續(xù)N個數(shù)據(jù)塊以及第N個數(shù)據(jù)塊之 后的數(shù)據(jù)塊的分塊信息(對應(yīng)于增加字節(jié)后增加了數(shù)據(jù)塊的情況,該數(shù)據(jù)塊對應(yīng)第i個數(shù) 據(jù)塊,后續(xù)N個數(shù)據(jù)塊對應(yīng)新增數(shù)據(jù)塊);
[0158] 如果N為負整數(shù),則記錄文件B的該數(shù)據(jù)塊、其后第(-N+1)個數(shù)據(jù)塊及其后續(xù)的 數(shù)據(jù)塊的分塊信息(對應(yīng)于刪除字節(jié)后減少數(shù)據(jù)塊的情況,該數(shù)據(jù)塊對應(yīng)第i個數(shù)據(jù)塊,其 后第(-N+1)個數(shù)據(jù)塊對應(yīng)第i+Ι個數(shù)據(jù)塊)。
[0159] 從上述實施例可以看出,相對于現(xiàn)有技術(shù),上述實施例中提供的文件分塊方法及 裝置、文件同步方法及裝置,具有以下有益效果:
[0160] 1)對文件的修改只影響增加或刪除字節(jié)位置附近的數(shù)據(jù)塊信息,因此,對文件切 片影響較小,在同步文件時,只需要更新增加或刪除字節(jié)位置附近的數(shù)據(jù)塊的信息,傳輸?shù)?文件內(nèi)容也相應(yīng)減少;2)文件切片大小不會無限制大,系統(tǒng)設(shè)計人員可根據(jù)系統(tǒng)的承受能 力設(shè)計K值,以平衡管理復(fù)雜性和文件傳輸代價;3)杜絕了大量文件碎片。
[0161] 本領(lǐng)域普通技術(shù)人員可以理解上述方法中的全部或部分步驟可通過程序來指令 相關(guān)硬件完成,所述程序可以存儲于計算機可讀存儲介質(zhì)中,如只讀存儲器、磁盤或光盤 等。可選地,上述實施例的全部或部分步驟也可以使用一個或多個集成電路來實現(xiàn)。相應(yīng) 地,上述實施例中的各模塊/單元可以采用硬件的形式實現(xiàn),也可以采用軟件功能模塊的 形式實現(xiàn)。本發(fā)明不限制于任何特定形式的硬件和軟件的結(jié)合。
[0162] 以上所述僅為本發(fā)明的優(yōu)選實施例而已,并非用于限定本發(fā)明的保護范圍。根據(jù) 本發(fā)明的
【發(fā)明內(nèi)容】
,還可有其他多種實施例,在不背離本發(fā)明精神及其實質(zhì)的情況下,熟悉 本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,凡在本發(fā)明的精神和原則 之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
【權(quán)利要求】
1. 一種基于文件分塊的文件修改方法,包括: 以K為數(shù)據(jù)塊的固定長度,采用定長的分塊方法將所述文件劃分為多個數(shù)據(jù)塊,并在 文件頭中記錄所有數(shù)據(jù)塊的分塊信息,所述分塊信息包括:數(shù)據(jù)塊的總塊數(shù)以及每個數(shù)據(jù) 塊的偏移值、長度、校驗值、索引編號以及實際存儲的位置鏈接; 當(dāng)在文件中增加字節(jié)時,如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長度小于等 于K,則合成新的第i個數(shù)據(jù)塊;如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長度大 于K甚至nK,則從增加字節(jié)處,連續(xù)截取長為K的數(shù)據(jù)塊,直至最后一個數(shù)據(jù)塊的長度小于 K,i、k、η、Κ均為大于0的正整數(shù),至此文件分塊結(jié)束; 當(dāng)在文件中刪除字節(jié)時,如果在第i個數(shù)據(jù)塊中刪除k字節(jié),不會刪除至下一數(shù)據(jù)塊, 則將刪除k字節(jié)后的數(shù)據(jù)塊作為第i個數(shù)據(jù)塊;如果在第i個數(shù)據(jù)塊中刪除k字節(jié),會刪除 至下一數(shù)據(jù)塊甚至刪除至第j個數(shù)據(jù)塊,j>i>〇,則將刪除字節(jié)起始位置之前的數(shù)據(jù)塊作為 第i個數(shù)據(jù)塊,將刪除字節(jié)至第j個數(shù)據(jù)塊的結(jié)束位置之后的數(shù)據(jù)塊作為第i+Ι個數(shù)據(jù)塊, 至此文件分塊結(jié)束; 當(dāng)在文件中增加字節(jié)或者刪除字節(jié)時,在文件分塊結(jié)束后,更新文件頭中的分塊信息。
2. 如權(quán)利要求1所述的方法,其特征在于: 所述當(dāng)在文件中增加字節(jié)時,在文件分塊結(jié)束后,更新文件頭中的分塊信息,包括: 如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長度小于等于K,合成新的第i個數(shù) 據(jù)塊后,重新計算該數(shù)據(jù)塊的校驗值和長度,并修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值+k,并 記錄在文件頭中; 如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長度大于K甚至nK,則在文件分塊結(jié) 束后,計算所述第i個數(shù)據(jù)塊的校驗值,更新其數(shù)據(jù)塊長度為Κ,計算新增數(shù)據(jù)塊的校驗值、 偏移值、長度,并修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值+k,并修改各個數(shù)據(jù)塊的索引編號, 記錄在文件頭中。
3. 如權(quán)利要求1所述的方法,其特征在于: 所述當(dāng)在文件中刪除字節(jié)時,所述在文件分塊結(jié)束后,更新頭文件中的分塊信息,包 括: 如果在第i個數(shù)據(jù)塊中刪除k字節(jié),不會刪除至下一數(shù)據(jù)塊,則重新計算該數(shù)據(jù)塊的校 驗值和長度,修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值_k,并記錄在文件頭中; 如果在第i個數(shù)據(jù)塊中刪除k字節(jié),會刪除至下一數(shù)據(jù)塊甚至刪除至第j個數(shù)據(jù)塊, 則在文件分塊結(jié)束后,計算所述第i個數(shù)據(jù)塊的校驗值,更新其數(shù)據(jù)塊長度為刪除 字節(jié)起始位置之前的數(shù)據(jù)塊長度,將刪除字節(jié)至第j個數(shù)據(jù)塊的結(jié)束位置之后的數(shù)據(jù)塊作 為第i+Ι個數(shù)據(jù)塊,更新所述第i+Ι個數(shù)據(jù)塊的偏移值為刪除字節(jié)的起始位置、更新其數(shù)據(jù) 塊長度為自刪除字節(jié)的起始位置起至第j個數(shù)據(jù)塊結(jié)束的長度-k,并計算所述第i+Ι個數(shù) 據(jù)塊的校驗值,修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值-k,并修改后續(xù)數(shù)據(jù)塊的索引編號,記 錄在文件頭中。
4. 一種基于如權(quán)利要求1或2或3所述的文件修改方法的單文件同步方法,包括: 第一裝置接收到第二裝置對文件B增加 k字節(jié)或刪除k字節(jié)后生成的文件頭SB ; 第一裝置將本地文件A的文件頭SA和SB進行比對,生成SA和S B的差異信息; 第一裝置將所述差異信息發(fā)送至第二裝置; 第二裝置根據(jù)所述差異信息和修改后的文件B,向第一裝置返回重構(gòu)所述本地文件A 所需的數(shù)據(jù)信息,第一裝置根據(jù)所述數(shù)據(jù)信息更新所述本地文件A ; 其中,所述第一裝置為服務(wù)器,所述第二裝置為客戶端;或者,所述第一裝置為客戶端, 所述第二裝置為服務(wù)器。
5. 如權(quán)利要求4所述的方法,其特征在于: 對于增加字節(jié),所述差異信息包括:第i個數(shù)據(jù)塊的分塊信息,或者,第i個數(shù)據(jù)塊和新 增數(shù)據(jù)塊的分塊信息,以及后續(xù)數(shù)據(jù)塊的分塊信息和數(shù)據(jù)塊的總塊數(shù); 對于刪除字節(jié),所述差異信息包括:第i個數(shù)據(jù)塊的分塊信息,或者,第i個數(shù)據(jù)塊和第 i+Ι個數(shù)據(jù)塊的分塊信息,以及后續(xù)數(shù)據(jù)塊的分塊信息和數(shù)據(jù)塊的總塊數(shù)。
6. 如權(quán)利要求5所述的方法,其特征在于: 對于增加字節(jié),如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長度小于等于K,則所 述第i個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值和長度,所述后續(xù)數(shù)據(jù)塊的分塊信 息包括:后續(xù)數(shù)據(jù)塊的偏移值;如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長度大于 K甚至nK,則所述第i個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值和長度,所述新增 數(shù)據(jù)塊的分塊信息包括:新增數(shù)據(jù)塊的校驗值、長度、偏移值和索引編號,所述后續(xù)數(shù)據(jù)塊 的分塊信息包括:后續(xù)數(shù)據(jù)塊的偏移值和索引編號; 對于刪除字節(jié),如果在第i個數(shù)據(jù)塊中刪除k字節(jié),不會刪除至下一數(shù)據(jù)塊,所述第i 個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值和長度,所述后續(xù)數(shù)據(jù)塊的分塊信息包 括:后續(xù)數(shù)據(jù)塊的偏移值;如果在第i個數(shù)據(jù)塊中刪除k字節(jié),會刪除至下一數(shù)據(jù)塊甚至刪 除至第j個數(shù)據(jù)塊,所述第i個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值和長度,所 述第i+Ι個數(shù)據(jù)塊的分塊信息包括:第i+Ι個數(shù)據(jù)塊的校驗值、長度、偏移值和索引編號,所 述后續(xù)數(shù)據(jù)塊的分塊信息包括:后續(xù)數(shù)據(jù)塊的偏移值和索引編號。
7. 如權(quán)利要求6所述的方法,其特征在于: 所述第一裝置將本地文件A的頭文件SA和SB進行比對,生成SA和S B的差異信息,包 括: 根據(jù)SA和SB計算文件B總數(shù)據(jù)塊減去文件A總數(shù)據(jù)塊的差值N ; 從兩個文件的第一個數(shù)據(jù)塊開始比對,直到找到第一個校驗值不同的兩個數(shù)據(jù)塊; 如果N = 0,則記錄文件B的該數(shù)據(jù)塊的分塊信息以及后續(xù)數(shù)據(jù)塊的分塊信息; 如果N為正整數(shù),則記錄文件B的該數(shù)據(jù)塊、后續(xù)N個數(shù)據(jù)塊以及第N個數(shù)據(jù)塊之后的 數(shù)據(jù)塊的分塊信息; 如果N為負整數(shù),則記錄文件B的該數(shù)據(jù)塊、其后第(-N+1)個數(shù)據(jù)塊及其后續(xù)的數(shù)據(jù) 塊的分塊信息。
8. 如權(quán)利要求4所述的方法,其特征在于: 當(dāng)?shù)谝谎b置與第二裝置完成同步后,第一裝置根據(jù)本地文件A的文件頭SA中記錄的所 有數(shù)據(jù)塊的長度以及數(shù)據(jù)塊總數(shù),計算一個數(shù)據(jù)塊的長度平均值,如果所述數(shù)據(jù)塊的長度 平均值小于預(yù)設(shè)閾值,則所述第一裝置對所述本地文件A以K為一個數(shù)據(jù)塊的長度重新分 塊,并通知第二裝置以相同的方式對文件B重新分塊,并計算校驗值,生成新的S A和SB。
9. 一種基于文件分塊的文件修改裝置,包括: 劃分模塊,用于以K為數(shù)據(jù)塊的固定長度,采用定長的分塊方法將所述文件劃分為多 個數(shù)據(jù)塊,并在文件頭中記錄所有數(shù)據(jù)塊的分塊信息,所述分塊信息包括:數(shù)據(jù)塊的總塊數(shù) 以及每個數(shù)據(jù)塊的偏移值、長度、校驗值、索引編號以及實際存儲的位置鏈接; 修改模塊,用于當(dāng)在文件中增加字節(jié)時,如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù) 塊的長度小于等于K,則合成新的第i個數(shù)據(jù)塊;如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該 數(shù)據(jù)塊的長度大于K甚至nK,則從增加字節(jié)處,連續(xù)截取長為K的數(shù)據(jù)塊,直至最后一個數(shù) 據(jù)塊的長度小于K,i、k、η、Κ均為大于等于1的整數(shù),至此文件分塊結(jié)束; 當(dāng)在文件中刪除字節(jié)時,如果在第i個數(shù)據(jù)塊中刪除k字節(jié),不會刪除至下一數(shù)據(jù)塊, 則將刪除k字節(jié)后的數(shù)據(jù)塊作為第i個數(shù)據(jù)塊;如果在第i個數(shù)據(jù)塊中刪除k字節(jié),會刪除 至下一數(shù)據(jù)塊甚至刪除至第j個數(shù)據(jù)塊,j>i>〇,則將刪除字節(jié)起始位置之前的數(shù)據(jù)塊作為 第i個數(shù)據(jù)塊,將刪除字節(jié)至第j個數(shù)據(jù)塊的結(jié)束位置之后的數(shù)據(jù)塊作為第i+Ι個數(shù)據(jù)塊, 至此文件分塊結(jié)束; 當(dāng)在文件中增加字節(jié)或者刪除字節(jié)時,在文件分塊結(jié)束后,更新頭文件中的分塊信 息; 發(fā)送模塊,用于將更新的頭文件發(fā)送至單文件同步裝置。
10. 如權(quán)利要求9所述的裝置,其特征在于: 所述修改模塊,用于當(dāng)在文件中增加字節(jié)時,在文件分塊結(jié)束后,更新頭文件中的分塊 信息,包括: 如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長度小于等于K,合成新的第i個數(shù) 據(jù)塊后,重新計算該數(shù)據(jù)塊的校驗值和長度,并修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值+k,并 記錄在文件頭中; 如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長度大于K甚至nK,則在文件分塊結(jié) 束后,計算所述第i個數(shù)據(jù)塊的校驗值,更新其數(shù)據(jù)塊長度為Κ,計算新增數(shù)據(jù)塊的校驗值、 偏移值、長度,并修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值+k,并修改各個數(shù)據(jù)塊的索引編號, 記錄在頭文件中; 所述修改模塊,用于當(dāng)在文件中刪除字節(jié)時,所述在文件分塊結(jié)束后,更新頭文件中的 分塊信息,包括: 如果在第i個數(shù)據(jù)塊中刪除k字節(jié),不會刪除至下一數(shù)據(jù)塊,則重新計算該數(shù)據(jù)塊的校 驗值和長度,修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值_k,并記錄在頭文件中; 如果在第i個數(shù)據(jù)塊中刪除k字節(jié),會刪除至下一數(shù)據(jù)塊甚至刪除至第j個數(shù)據(jù)塊, 則在文件分塊結(jié)束后,計算所述第i個數(shù)據(jù)塊的校驗值,更新其數(shù)據(jù)塊長度為刪除 字節(jié)起始位置之前的數(shù)據(jù)塊長度,將刪除字節(jié)至第j個數(shù)據(jù)塊的結(jié)束位置之后的數(shù)據(jù)塊作 為第i+Ι個數(shù)據(jù)塊,更新所述第i+Ι個數(shù)據(jù)塊的偏移值為刪除字節(jié)的起始位置、更新其數(shù)據(jù) 塊長度為自刪除字節(jié)的起始位置起至第j個數(shù)據(jù)塊結(jié)束的長度-k,并計算所述第i+Ι個數(shù) 據(jù)塊的校驗值,修改后續(xù)數(shù)據(jù)塊的偏移值為原偏移值-k,并修改后續(xù)數(shù)據(jù)塊的索引編號,記 錄在頭文件中。
11. 一種基于如權(quán)利要求9或10所述的文件修改裝置的單文件同步裝置,包括: 接收模塊,用于接收文件分塊裝置對文件B增加 k字節(jié)或刪除k字節(jié)后生成的文件頭 SB,還用于接收所述文件分塊裝置返回重構(gòu)所述本地文件A所需的數(shù)據(jù)信息; 差異信息生成模塊,用于將本地文件A的頭文件SA和SB進行比對,生成SA和S B的差異 信息; 同步模塊,用于將所述差異信息發(fā)送至所述文件分塊裝置,并根據(jù)所述文件分塊裝置 返回的重構(gòu)所述本地文件A所需的數(shù)據(jù)信息更新所述本地文件A。
12. 如權(quán)利要求11所述的裝置,其特征在于: 對于增加字節(jié),所述差異信息包括:第i個數(shù)據(jù)塊的分塊信息,或者,第i個數(shù)據(jù)塊和新 增數(shù)據(jù)塊的分塊信息,以及后續(xù)數(shù)據(jù)塊的分塊信息和數(shù)據(jù)塊的總塊數(shù); 對于刪除字節(jié),所述差異信息包括:第i個數(shù)據(jù)塊的分塊信息,或者,第i個數(shù)據(jù)塊和第 i+Ι個數(shù)據(jù)塊的分塊信息,以及后續(xù)數(shù)據(jù)塊的分塊信息和數(shù)據(jù)塊的總塊數(shù)。
13. 如權(quán)利要求12所述的裝置,其特征在于: 對于增加字節(jié),如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長度小于等于K,則所 述第i個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值和長度,所述后續(xù)數(shù)據(jù)塊的分塊信 息包括:后續(xù)數(shù)據(jù)塊的偏移值;如果在第i個數(shù)據(jù)塊中增加 k字節(jié)后,該數(shù)據(jù)塊的長度大于 K甚至nK,則所述第i個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值和長度,所述新增 數(shù)據(jù)塊的分塊信息包括:新增數(shù)據(jù)塊的校驗值、長度、偏移值和索引編號,所述后續(xù)數(shù)據(jù)塊 的分塊信息包括:后續(xù)數(shù)據(jù)塊的偏移值和索引編號; 對于刪除字節(jié),如果在第i個數(shù)據(jù)塊中刪除k字節(jié),不會刪除至下一數(shù)據(jù)塊,所述第i 個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值和長度,所述后續(xù)數(shù)據(jù)塊的分塊信息包 括:后續(xù)數(shù)據(jù)塊的偏移值;如果在第i個數(shù)據(jù)塊中刪除k字節(jié),會刪除至下一數(shù)據(jù)塊甚至刪 除至第j個數(shù)據(jù)塊,所述第i個數(shù)據(jù)塊的分塊信息包括:第i個數(shù)據(jù)塊的校驗值和長度,所 述第i+Ι個數(shù)據(jù)塊的分塊信息包括:第i+Ι個數(shù)據(jù)塊的校驗值、長度、偏移值和索引編號,所 述后續(xù)數(shù)據(jù)塊的分塊信息包括:后續(xù)數(shù)據(jù)塊的偏移值和索引編號。
14. 如權(quán)利要求13所述的裝置,其特征在于: 所述差異信息生成模塊,用于將本地文件A的頭文件SA和SB進行比對,生成SA和S B的 差異信息,包括: 根據(jù)SA和SB計算文件B總數(shù)據(jù)塊減去文件A總數(shù)據(jù)塊的差值N ; 從兩個文件的第一個數(shù)據(jù)塊開始比對,直到找到第一個校驗值不同的兩個數(shù)據(jù)塊; 如果N = 0,則記錄文件B的該數(shù)據(jù)塊的分塊信息以及后續(xù)數(shù)據(jù)塊的分塊信息; 如果N為正整數(shù),則記錄文件B的該數(shù)據(jù)塊、后續(xù)N個數(shù)據(jù)塊以及第N個數(shù)據(jù)塊之后的 數(shù)據(jù)塊的分塊信息; 如果N為負整數(shù),則記錄文件B的該數(shù)據(jù)塊、其后第(-N+1)個數(shù)據(jù)塊及其后續(xù)的數(shù)據(jù) 塊的分塊信息。
15. -種單文件同步系統(tǒng),包括:如權(quán)利要求9?10所述的文件修改裝置和如權(quán)利要 求11?14所述的單文件同步裝置; 其中,所述文件修改裝置為服務(wù)器,所述單文件同步裝置為客戶端;或者,所述文件修 改裝置為客戶端,所述單文件同步裝置為服務(wù)器。
【文檔編號】H04L29/08GK104092780SQ201410368093
【公開日】2014年10月8日 申請日期:2014年7月29日 優(yōu)先權(quán)日:2014年7月29日
【發(fā)明者】王淑玲, 張云勇, 房秉毅 申請人:中國聯(lián)合網(wǎng)絡(luò)通信集團有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1