基于文件分塊的文件修改方法、單文件同步方法及裝置制造方法
【專利摘要】本發明公開了一種基于文件分塊的文件修改方法、同步方法及裝置,文件修改裝置包括:劃分模塊用于采用定長的分塊方法將文件劃分為多個數據塊,并在文件頭中記錄所有數據塊的分塊信息;修改模塊用于在文件中增加字節或者刪除字節后,更新文件頭中的分塊信息;單文件同步裝置包括:接收模塊用于接收文件分塊裝置對文件B修改后生成的文件頭SB;差異信息生成模塊用于將本地文件A的文件頭SA和SB比對,生成SA和SB的差異信息;同步模塊用于將所述差異信息發送至文件分塊裝置,并根據文件分塊裝置返回的重構本地文件A所需的數據信息更新本地文件A。本發明能夠減少文件修改對文件分塊的影響,從而在同步文件時,減少傳輸的數據量。
【專利說明】基于文件分塊的文件修改方法、單文件同步方法及裝置
【技術領域】
[0001] 本發明涉及數據同步技術,具體涉及一種基于文件分塊的文件修改方法及裝置、 單文件同步方法及裝置。
【背景技術】
[0002] 云存儲的理念在于允許用戶隨時隨地地訪問存儲在云端的文件,并且允許用戶對 文件進行修改和刪除等操作。因此,需要及時地同步用戶端和服務器的文件,保證文件的一 致性。
[0003] 目前的單文件同步方法主要是rsync算法。假設服務器上的文件為A,客戶端的文 件為B。文件A和文件B非常相似。這兩個文件同步的步驟為:
[0004] 1)用戶端將文件B分割成連續不重疊的固定大小數據塊K,最后一個塊的大小可 能會<k ;
[0005] 2)用戶端為每一個塊計算校驗值,生成一個32位的弱滾動校驗和一個128位的 MD4校驗;
[0006] 3)用戶端將校驗值發送給服務器;
[0007] 4)服務器通過以相同的方式,對文件A切塊,并計算校驗值;
[0008] 5)服務器比對文件A和用戶端發來的文件B的校驗信息,并生成差異編碼信息; [0009] 6)服務器給用戶端發送差異編碼信息,同時發送重構文件A的指令;
[0010] 7)用戶端將根據差異編碼信息和文件B重構文件A。
[0011] Rsync是應用較廣的文件同步方法,但是由于它采用的是定長的文件切割方法,因 此,在文件中1個字節的變化會帶來大量切片的變化,存在同步數據量過大的問題。
【發明內容】
[0012] 本發明需要解決的技術問題是提供一種基于文件分塊的文件修改方法及裝置、單 文件同步方法及裝置,以減少文件修改對文件分塊的影響,從而在同步文件時,減少傳輸的 數據量。
[0013] 為了解決上述技術問題,本發明提供了一種基于文件分塊的文件修改方法,包 括:
[0014] 以K為數據塊的固定長度,采用定長的分塊方法將所述文件劃分為多個數據塊, 并在文件頭中記錄所有數據塊的分塊信息,所述分塊信息包括:數據塊的總塊數以及每個 數據塊的偏移值、長度、校驗值、索引編號以及實際存儲的位置鏈接;
[0015] 當在文件中增加字節時,如果在第i個數據塊中增加 k字節后,該數據塊的長度小 于等于K,則合成新的第i個數據塊;如果在第i個數據塊中增加 k字節后,該數據塊的長 度大于K甚至nK,則從增加字節處,連續截取長為K的數據塊,直至最后一個數據塊的長度 小于K,i、k、η、Κ均為大于0的正整數,至此文件分塊結束;
[0016] 當在文件中刪除字節時,如果在第i個數據塊中刪除k字節,不會刪除至下一數據 塊,則將刪除k字節后的數據塊作為第i個數據塊;如果在第i個數據塊中刪除k字節,會 刪除至下一數據塊甚至刪除至第j個數據塊,j>i>〇,則將刪除字節起始位置之前的數據塊 作為第i個數據塊,將刪除字節至第j個數據塊的結束位置之后的數據塊作為第i+ι個數 據塊,至此文件分塊結束;
[0017] 當在文件中增加字節或者刪除字節時,在文件分塊結束后,更新文件頭中的分塊 信息。
[0018] 進一步地,所述當在文件中增加字節時,在文件分塊結束后,更新文件頭中的分塊 信息,包括:
[0019] 如果在第i個數據塊中增加 k字節后,該數據塊的長度小于等于K,合成新的第i 個數據塊后,重新計算該數據塊的校驗值和長度,并修改后續數據塊的偏移值為原偏移值 +k,并記錄在文件頭中;
[0020] 如果在第i個數據塊中增加 k字節后,該數據塊的長度大于K甚至nK,則在文件分 塊結束后,計算所述第i個數據塊的校驗值,更新其數據塊長度為Κ,計算新增數據塊的校 驗值、偏移值、長度,并修改后續數據塊的偏移值為原偏移值+k,并修改各個數據塊的索引 編號,記錄在文件頭中。
[0021] 進一步地,所述當在文件中刪除字節時,所述在文件分塊結束后,更新頭文件中的 分塊信息,包括:
[0022] 如果在第i個數據塊中刪除k字節,不會刪除至下一數據塊,則重新計算該數據塊 的校驗值和長度,修改后續數據塊的偏移值為原偏移值_k,并記錄在文件頭中;
[0023] 如果在第i個數據塊中刪除k字節,會刪除至下一數據塊甚至刪除至第j個數據 塊,j>i>〇,則在文件分塊結束后,計算所述第i個數據塊的校驗值,更新其數據塊長度為刪 除字節起始位置之前的數據塊長度,將刪除字節至第j個數據塊的結束位置之后的數據塊 作為第i + Ι個數據塊,更新所述第i + Ι個數據塊的偏移值為刪除字節的起始位置、更新其數 據塊長度為自刪除字節的起始位置起至第j個數據塊結束的長度_k,并計算所述第i + Ι個 數據塊的校驗值,修改后續數據塊的偏移值為原偏移值_k,并修改后續數據塊的索引編號, 記錄在文件頭中。
[0024] 為了解決上述技術問題,本發明還提供了一種基于如上所述的文件修改方法的單 文件同步方法,包括:
[0025] 第一裝置接收到第二裝置對文件B增加 k字節或刪除k字節后生成的文件頭SB ;
[0026] 第一裝置將本地文件A的文件頭SA和SB進行比對,生成S A和SB的差異信息;
[0027] 第一裝置將所述差異信息發送至第二裝置;
[0028] 第二裝置根據所述差異信息和修改后的文件B,向第一裝置返回重構所述本地文 件A所需的數據信息,第一裝置根據所述數據信息更新所述本地文件A ;
[0029] 其中,所述第一裝置為服務器,所述第二裝置為客戶端;或者,所述第一裝置為客 戶端,所述第二裝置為服務器。
[0030] 進一步地,對于增加字節,所述差異信息包括:第i個數據塊的分塊信息,或者,第 i個數據塊和新增數據塊的分塊信息,以及后續數據塊的分塊信息和數據塊的總塊數;
[0031] 對于刪除字節,所述差異信息包括:第i個數據塊的分塊信息,或者,第i個數據塊 和第i+Ι個數據塊的分塊信息,以及后續數據塊的分塊信息和數據塊的總塊數。
[0032] 進一步地,對于增加字節,如果在第i個數據塊中增加 k字節后,該數據塊的長度 小于等于K,則所述第i個數據塊的分塊信息包括:第i個數據塊的校驗值和長度,所述后 續數據塊的分塊信息包括:后續數據塊的偏移值;如果在第i個數據塊中增加 k字節后,該 數據塊的長度大于K甚至nK,則所述第i個數據塊的分塊信息包括:第i個數據塊的校驗值 和長度,所述新增數據塊的分塊信息包括:新增數據塊的校驗值、長度、偏移值和索引編號, 所述后續數據塊的分塊信息包括:后續數據塊的偏移值和索引編號;
[0033] 對于刪除字節,如果在第i個數據塊中刪除k字節,不會刪除至下一數據塊,所述 第i個數據塊的分塊信息包括:第i個數據塊的校驗值和長度,所述后續數據塊的分塊信息 包括:后續數據塊的偏移值;如果在第i個數據塊中刪除k字節,會刪除至下一數據塊甚至 刪除至第j個數據塊,所述第i個數據塊的分塊信息包括:第i個數據塊的校驗值和長度, 所述第i+Ι個數據塊的分塊信息包括:第i+Ι個數據塊的校驗值、長度、偏移值和索引編號, 所述后續數據塊的分塊信息包括:后續數據塊的偏移值和索引編號。
[0034] 進一步地,所述第一裝置將本地文件A的頭文件SA和SB進行比對,生成S A和SB的 差異信息,包括:
[0035] 根據SA和SB計算文件B總數據塊減去文件A總數據塊的差值N ;
[0036] 從兩個文件的第一個數據塊開始比對,直到找到第一個校驗值不同的兩個數據 塊;
[0037] 如果N = 0,則記錄文件B的該數據塊的分塊信息以及后續數據塊的分塊信息;
[0038] 如果N為正整數,則記錄文件B的該數據塊、后續N個數據塊以及第N個數據塊之 后的數據塊的分塊信息;
[0039] 如果N為負整數,則記錄文件B的該數據塊、其后第(-N+1)個數據塊及其后續的 數據塊的分塊信息。
[0040] 進一步地,當第一裝置與第二裝置完成同步后,第一裝置根據本地文件A的文件 頭SA中記錄的所有數據塊的長度以及數據塊總數,計算一個數據塊的長度平均值,如果所 述數據塊的長度平均值小于預設閾值,則所述第一裝置對所述本地文件A以K為一個數據 塊的長度重新分塊,并通知第二裝置以相同的方式對文件B重新分塊,并計算校驗值,生成 新的s A和SB。
[0041] 為了解決上述技術問題,本發明還提供了一種基于文件分塊的文件修改裝置,包 括:
[0042] 劃分模塊,用于以K為數據塊的固定長度,采用定長的分塊方法將所述文件劃分 為多個數據塊,并在文件頭中記錄所有數據塊的分塊信息,所述分塊信息包括:數據塊的總 塊數以及每個數據塊的偏移值、長度、校驗值、索引編號以及實際存儲的位置鏈接;
[0043] 修改模塊,用于當在文件中增加字節時,如果在第i個數據塊中增加 k字節后,該 數據塊的長度小于等于K,則合成新的第i個數據塊;如果在第i個數據塊中增加 k字節后, 該數據塊的長度大于K甚至nK,則從增加字節處,連續截取長為K的數據塊,直至最后一個 數據塊的長度小于K,i、k、η、Κ均為大于等于1的整數,至此文件分塊結束;
[0044] 當在文件中刪除字節時,如果在第i個數據塊中刪除k字節,不會刪除至下一數據 塊,則將刪除k字節后的數據塊作為第i個數據塊;如果在第i個數據塊中刪除k字節,會 刪除至下一數據塊甚至刪除至第j個數據塊,j>i>〇,則將刪除字節起始位置之前的數據塊 作為第i個數據塊,將刪除字節至第j個數據塊的結束位置之后的數據塊作為第i+ι個數 據塊,至此文件分塊結束;
[0045] 當在文件中增加字節或者刪除字節時,在文件分塊結束后,更新頭文件中的分塊 信息;
[0046] 發送模塊,用于將更新的頭文件發送至單文件同步裝置。
[0047] 進一步地,所述修改模塊,用于當在文件中增加字節時,在文件分塊結束后,更新 頭文件中的分塊信息,包括:
[0048] 如果在第i個數據塊中增加 k字節后,該數據塊的長度小于等于K,合成新的第i 個數據塊后,重新計算該數據塊的校驗值和長度,并修改后續數據塊的偏移值為原偏移值 +k,并記錄在文件頭中;
[0049] 如果在第i個數據塊中增加 k字節后,該數據塊的長度大于K甚至nK,則在文件分 塊結束后,計算所述第i個數據塊的校驗值,更新其數據塊長度為Κ,計算新增數據塊的校 驗值、偏移值、長度,并修改后續數據塊的偏移值為原偏移值+k,并修改各個數據塊的索引 編號,記錄在頭文件中;
[0050] 所述修改模塊,用于當在文件中刪除字節時,所述在文件分塊結束后,更新頭文件 中的分塊信息,包括:
[0051] 如果在第i個數據塊中刪除k字節,不會刪除至下一數據塊,則重新計算該數據塊 的校驗值和長度,修改后續數據塊的偏移值為原偏移值_k,并記錄在頭文件中;
[0052] 如果在第i個數據塊中刪除k字節,會刪除至下一數據塊甚至刪除至第j個數據 塊,j>i>〇,則在文件分塊結束后,計算所述第i個數據塊的校驗值,更新其數據塊長度為刪 除字節起始位置之前的數據塊長度,將刪除字節至第j個數據塊的結束位置之后的數據塊 作為第i+Ι個數據塊,更新所述第i+Ι個數據塊的偏移值為刪除字節的起始位置、更新其數 據塊長度為自刪除字節的起始位置起至第j個數據塊結束的長度_k,并計算所述第i+Ι個 數據塊的校驗值,修改后續數據塊的偏移值為原偏移值_k,并修改后續數據塊的索引編號, 記錄在頭文件中。
[0053] 為了解決上述技術問題,本發明還提供了一種基于如上所述的文件修改裝置的單 文件同步裝置,包括:
[0054] 接收模塊,用于接收文件分塊裝置對文件B增加 k字節或刪除k字節后生成的文 件頭SB,還用于接收所述文件分塊裝置返回重構所述本地文件A所需的數據信息;
[0055] 差異信息生成模塊,用于將本地文件A的頭文件SA和SB進行比對,生成S A和SB的 差異?目息;
[0056] 同步模塊,用于將所述差異信息發送至所述文件分塊裝置,并根據所述文件分塊 裝置返回的重構所述本地文件Α所需的數據信息更新所述本地文件Α。
[0057] 進一步地,對于增加字節,所述差異信息包括:第i個數據塊的分塊信息,或者,第 i個數據塊和新增數據塊的分塊信息,以及后續數據塊的分塊信息和數據塊的總塊數;
[0058] 對于刪除字節,所述差異信息包括:第i個數據塊的分塊信息,或者,第i個數據塊 和第i+Ι個數據塊的分塊信息,以及后續數據塊的分塊信息和數據塊的總塊數。
[0059] 進一步地,對于增加字節,如果在第i個數據塊中增加 k字節后,該數據塊的長度 小于等于K,則所述第i個數據塊的分塊信息包括:第i個數據塊的校驗值和長度,所述后 續數據塊的分塊信息包括:后續數據塊的偏移值;如果在第i個數據塊中增加 k字節后,該 數據塊的長度大于K甚至nK,則所述第i個數據塊的分塊信息包括:第i個數據塊的校驗值 和長度,所述新增數據塊的分塊信息包括:新增數據塊的校驗值、長度、偏移值和索引編號, 所述后續數據塊的分塊信息包括:后續數據塊的偏移值和索引編號;
[0060] 對于刪除字節,如果在第i個數據塊中刪除k字節,不會刪除至下一數據塊,所述 第i個數據塊的分塊信息包括:第i個數據塊的校驗值和長度,所述后續數據塊的分塊信息 包括:后續數據塊的偏移值;如果在第i個數據塊中刪除k字節,會刪除至下一數據塊甚至 刪除至第j個數據塊,所述第i個數據塊的分塊信息包括:第i個數據塊的校驗值和長度, 所述第i+Ι個數據塊的分塊信息包括:第i+Ι個數據塊的校驗值、長度、偏移值和索引編號, 所述后續數據塊的分塊信息包括:后續數據塊的偏移值和索引編號。
[0061] 進一步地,所述差異信息生成模塊,用于將本地文件A的頭文件SA和SB進行比對, 生成S A和SB的差異信息,包括:
[0062] 根據SA和SB計算文件B總數據塊減去文件A總數據塊的差值N ;
[0063] 從兩個文件的第一個數據塊開始比對,直到找到第一個校驗值不同的兩個數據 塊;
[0064] 如果N = 0,則記錄文件B的該數據塊的分塊信息以及后續數據塊的分塊信息; [0065] 如果N為正整數,則記錄文件B的該數據塊、后續N個數據塊以及第N個數據塊之 后的數據塊的分塊信息;
[0066] 如果N為負整數,則記錄文件B的該數據塊、其后第(-N+1)個數據塊及其后續的 數據塊的分塊信息。
[0067] 為了解決上述技術問題,本發明還提供了一種單文件同步系統,包括:如上所述的 文件修改裝置和如上所述的單文件同步裝置;
[0068] 其中,所述文件修改裝置為服務器,所述單文件同步裝置為客戶端;或者,所述文 件修改裝置為客戶端,所述單文件同步裝置為服務器。
[0069] 與現有技術相比,本發明實施例提供的文件分塊方法及裝置、文件同步方法及裝 置,具有以下有益效果:
[0070] 1)對文件的修改只影響增加或刪除字節位置附近的數據塊信息,因此,對文件切 片影響較小,在同步文件時,只需要更新增加或刪除字節位置附近的數據塊的信息,傳輸的 文件內容也相應減少;2)文件分塊大小不會無限制大,系統設計人員可根據系統的承受能 力設計K值,以平衡管理復雜性和文件傳輸代價;3)杜絕了大量文件碎片。
【專利附圖】
【附圖說明】
[0071] 圖1是現有技術中文件A和文件B的組成示意圖;
[0072] 圖2是實施例中文件分塊方法的流程圖;
[0073] 圖3是實施例中基于上述文件分塊方法的單文件同步方法的流程圖;
[0074] 圖4是實施例中一種單文件同步系統的結構圖。
【具體實施方式】
[0075] 為使本發明的目的、技術方案和優點更加清楚明白,下文中將結合附圖對本發明 的實施例進行詳細說明。需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中 的特征可以相互任意組合。
[0076] 實施例:
[0077] 本實施例中包括兩個裝置,其中,第一裝置為服務器,第二裝置為客戶端;或者,第 一裝置為客戶端,第二裝置為服務器,本實施例的前提是第一裝置和第二裝置上同時存在 一個文件,同步算法的目標在于保持兩個裝置的文件的一致,同時要求第二裝置和第一裝 置的數據塊傳輸量最小。約定第一裝置上的文件為A,第二裝置的文件為B。系統為文件A 維護文件分塊信息為SA,文件B的分塊信息為SB。文件A和文件B的組成如圖1所示,文件 頭head,也即5 4和SB,包含了數據塊的總塊數以及所有數據塊的分塊信息,即對于每一個數 據塊,需記錄數據塊的初始字節的偏移值(offset)、數據塊長度、數據塊的校驗值、索引編 號以及實際存儲的位置鏈接(系統借助于該鏈接可獲取數據塊的詳細內容),dbi表示第i 個數據塊。初始狀態下,SA和SB是一致的,如果在第一裝置或第二裝置對文件進行了更改, 就涉及到3 4和SB的同步問題,S卩如果在客戶端對文件進行了修改,則服務器端需進行同步, 如果在服務器端對文件進行了修改,則客戶端需進行同步。
[0078] 在文件增量同步算法的設計中,需要盡可能減少重復數據傳輸,即盡量不傳輸文 件A和文件B的相同部分。但是在Rsync算法中,定長的文件切塊方法使得文件中一個字 節的增減都會帶來大量數據塊的改變。為此,本實施例提供了一種文件分塊方法,如圖2所 示,以對第二裝置的文件進行修改為例,包括以下步驟:
[0079] S101 :以K為數據塊的固定長度,采用定長的分塊方法將所述文件劃分為多個數 據塊,并在文件頭中記錄所有數據塊的分塊信息,所述分塊信息包括:數據塊的總塊數以及 每個數據塊的偏移值、長度、校驗值、索引編號以及實際存儲的位置鏈接;
[0080] S102 :第二裝置對文件進行修改;
[0081] 對文件的修改包括了替換、增加和刪除。替換可理解為用等量字節的內容去替換 原有的內容,因此,對文件的切塊方式不產生影響。所以,本發明只考慮對文件增加和刪除 字節的情況。
[0082] 當在文件中刪除字節時,如果在第i個數據塊中刪除k字節,不會刪除至下一數據 塊,則將刪除k字節后的數據塊作為第i個數據塊;如果在第i個數據塊中刪除k字節,會 刪除至下一數據塊甚至刪除至第j個數據塊,j>i>〇,則將刪除字節起始位置之前的數據塊 作為第i個數據塊,將刪除字節至第j個數據塊的結束位置之后的數據塊作為第i+ι個數 據塊,至此文件分塊結束;
[0083] 當在文件中增加字節或者刪除字節時,在文件分塊結束后,更新文件頭中的分塊 信息。
[0084] 其中,當在文件中增加字節時,在文件分塊結束后,更新文件頭中的分塊信息,包 括:
[0085] 如果在第i個數據塊中增加 k字節后,該數據塊的長度小于等于K,合成新的第i 個數據塊后,重新計算該數據塊的校驗值和長度,并修改后續數據塊的偏移值為原偏移值 +k,并記錄在文件頭中;
[0086] 如果在第i個數據塊中增加 k字節后,該數據塊的長度大于K甚至nK,則在文件分 塊結束后,計算所述第i個數據塊的校驗值,更新其數據塊長度為Κ,計算新增數據塊的校 驗值、偏移值、長度,并修改后續數據塊的偏移值為原偏移值+k,并修改各個數據塊的索引 編號,記錄在文件頭中。
[0087] 在一個應用示例中,假設增加的字節的首位為距離文件頭部offset處,長度為k, 且offset^ = offset〈 = offseti+lengthj即,在第i個數據塊中增加字節),則存在以下 情況:
[0088] a)若lengthi+K = K,則意味著dbi在擴展了 k個字節后,仍然未達到數據塊的最 大長度。因此,新增加的k個字節與原有的第i個數據塊dbi組合成新的數據塊,并通報給 head,由head重新計算dbi的校驗值以及后續數據塊的offset值,即原數據塊的偏移值+k。
[0089] b)若lengthi+kMi,則意味著dbi在擴展了 k個字節后,已經達到了數據塊的最大 長度,則繼續判斷:dbi+1
[0090] i) lengthi+lengthw+K = 2K,則意味著可將dbi和dbi+1以及新增加的k個字節, 組合成2個數據塊,因此,優先從off seh至off setjk的文件塊中,截取長為K的文件塊, 并記為dbi,從offseti+K至offseti+k的文件內容記為db i+1 ;同時,通知文件頭head更改 相應的數據塊的分塊信息,參見a);
[0091] ii) lengthi+lengthi^+kWK,意味著dbi、dbi+1以及新增加的k個字節將超過2個 數據塊的長度。因此,優先從off seh至off setjk的文件塊中,截取長為K的文件塊,并標 識為dbi ;然后,從off setjK至off setjk的文件塊中,截取長為K的文件塊,標識為dbi+1, 從offseti+ZK至offsetjk的文件塊中,繼續以K為單位,對文件塊進行切片,直至最后一 個塊的長度小于K,記為dbp文件分塊結束后,更新head中的分片信息,即計算所述第i個 數據塊的校驗值,更新其數據塊大小為K,計算新增數據塊的校驗值、數據塊偏移值、數據塊 大小,并修改后續數據塊的偏移值為原偏移值+k,并修改各個數據塊的索引編號,記錄在文 件頭中。
[0092] 上述還有一種情況沒有討論到,即dbi為文件的最后一個數據塊,也即用戶對文件 的操作為在文件末尾增加 k字節的內容,這類情況可參考ii)。
[0093] 其中,當在文件中刪除字節時,所述在文件分塊結束后,更新文件頭中的分塊信 息,包括:
[0094] 如果在第i個數據塊中刪除k字節,不會刪除至下一數據塊,則重新計算該數據塊 的校驗值和長度,修改后續數據塊的偏移值為原偏移值_k,并記錄在文件頭中;
[0095] 如果在第i個數據塊中刪除k字節,會刪除至下一數據塊甚至刪除至第j個數據 塊,j>i>〇,則在文件分塊結束后,計算所述第i個數據塊的校驗值,更新其數據塊長度為刪 除字節起始位置之前的數據塊長度,將刪除字節至第j個數據塊的結束位置之后的數據塊 作為第i+Ι個數據塊,更新所述第i+Ι個數據塊的偏移值為刪除字節的起始位置、更新其數 據塊長度為自刪除字節的起始位置起至第j個數據塊結束的長度-k,并計算所述第i+Ι個 數據塊的校驗值,修改后續數據塊的偏移值為原偏移值-k,并修改后續數據塊的索引編號, 記錄在文件頭中。
[0096] 在一個應用示例中,假設刪除的字節的首位為距離文件頭部offset處,長度為k, 且offset^ = offset〈 = offseti+lengthi (即,在第i個數據塊中刪除字節)。刪除字節 時的處理原則是:盡量減少對數據塊切分方式的改變。因此,刪除字節的處理步驟如下:
[0097] a)若k〈 = lengthi-Orffset-offseti)則意味著用戶對文件的修改僅改變了第i 個數據塊dbi,對文件的其他分塊不產生影響。因此,僅需要head更新第i個數據塊的校驗 信息及后續數據塊的偏移值,即〇ffseti+1_k ;
[0098] b)如果 lengthy (offset - offset^〈 = k〈 = lengthy (offset -ofTsetJ+lengthiq,改變了第i和i+1這兩個數據塊dbi、dbi+1,為了不影響分塊,dbi的數 據塊的起始位置還是offset^長度變為offset - offset^ ;dbi+1的起始位置變為offset,長 度變為lengthi+lengthi+foffset - offset^ -k,隨后數據塊的偏移值都減去k ;
[0099] 此時,塊數還是沒有變,即沒有刪去數據塊,也就是說,索引的個數沒有變,因此, head僅需要更新dbi的校驗信息、數據塊大小,dbi+1的校驗信息、偏移值和數據塊大小,以 及后續數據塊的偏移值。
[0100] c)否則意味著需要刪除多個數據塊。因此,自offset開始,刪除至第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個數據塊,刪除自offset」至讓-[16叩1:11廠((^861:-offsetj) + (lengthi+1+lengthi+2+··· +lengthJ_1)的字節。
[0103] 同時,通知head刪除數據塊i+1至j的相關信息,更新dbi和dbj的校驗信息,并 修改隨后的數據塊的offset信息為:原數據塊偏移值-k。
[0104] I:匕如,j = i+2 ;滿足:
[0105] lengthj-(offset - offsetj)+lengthi+1< = k< = lengthj- (offset -offsetj) +lengthi+1+lengthi+2,
[0106] 對于第i個數據塊(同上),dbi的數據塊的起始位置還是offset,長度變為 offset - offsetj ;
[0107] 對于第j個數據塊,起始位置為offset,長度變為lengthy (offset -offsetj)+lengthi+1+lengthi+2-k ;
[0108] 此時的數據塊會少1個,也就是說索引會發生改變,刪除字節后的第j個數據塊 作為第i+Ι個數據塊,隨后的數據塊的索引編號也發生相應改變,隨后的數據塊的起始位 置-k。
[0109] 增加或者刪除字節后,依據上述方法,會生成新的head信息,即SB,系統將S B發送 給第一裝置,由此進入了第一裝置的同步階段。
[0110] 如圖3所示,本實施例提供了一種基于上述文件分塊方法的單文件同步方法,包 括以下步驟:
[0111] S201 :第一裝置接收到第二裝置對文件B增加 k字節或刪除k字節生成的文件頭 SB;
[0112] S202 :第一裝置比對本地文件A的文件頭SA和SB,生成SA和SB的差異信息;
[0113] S203 :第一裝置將所述差異信息發送至第二裝置;
[0114] S204 :第二裝置根據所述差異信息和修改后的文件B,向第一裝置返回重構所述 本地文件A所需的數據信息;
[0115] S205 :第一裝置根據所述數據信息更新所述本地文件A。
[0116] 其中,所述第一裝置為服務器,所述第二裝置為客戶端;或者,所述第一裝置為客 戶端,所述第二裝置為服務器。
[0117] 其中,對于增加字節,所述差異信息包括:第i個數據塊的分塊信息,或者,第i個 數據塊和新增數據塊的分塊信息,以及后續數據塊的分塊信息和數據塊的總塊數;
[0118] 對于刪除字節,所述差異信息包括:第i個數據塊的分塊信息,或者,第i個數據塊 和第i+Ι個數據塊的分塊信息,以及后續數據塊的分塊信息和數據塊的總塊數。
[0119] 具體地,對于增加字節,如果在第i個數據塊中增加 k字節后,該數據塊的長度小 于等于K,則所述第i個數據塊的分塊信息包括:第i個數據塊的校驗值和長度,所述后續 數據塊的分塊信息包括:后續數據塊的偏移值;如果在第i個數據塊中增加 k字節后,該數 據塊的長度大于K甚至nK,則所述第i個數據塊的分塊信息包括:第i個數據塊的校驗值 和長度,所述新增數據塊的分塊信息包括:新增數據塊的校驗值、長度、偏移值和索引編號, 所述后續數據塊的分塊信息包括:后續數據塊的偏移值和索引編號;
[0120] 對于刪除字節,如果在第i個數據塊中刪除k字節,不會刪除至下一數據塊,所述 第i個數據塊的分塊信息包括:第i個數據塊的校驗值和長度,所述后續數據塊的分塊信息 包括:后續數據塊的偏移值;如果在第i個數據塊中刪除k字節,會刪除至下一數據塊甚至 刪除至第j個數據塊,所述第i個數據塊的分塊信息包括:第i個數據塊的校驗值和長度, 所述第i+Ι個數據塊的分塊信息包括:第i+Ι個數據塊的校驗值、長度、偏移值和索引編號, 所述后續數據塊的分塊信息包括:后續數據塊的偏移值和索引編號。
[0121] 在步驟S202中,所述第一裝置將本地文件A的頭文件SA和SB進行比對,生成5 4和 SB的差異信息,包括:
[0122] 根據SA和SB計算文件B總數據塊減去文件A總數據塊的差值N ;
[0123] 從兩個文件的第一個數據塊開始比對,直到找到第一個校驗值不同的兩個數據 塊;
[0124] 如果N = 0,則記錄文件B的該數據塊的分塊信息以及后續數據塊的分塊信息(對 應于增加或刪除字節而沒有影響數據塊分塊個數的情況);
[0125] 如果N為正整數,則記錄文件B的該數據塊、后續N個數據塊以及第N個數據塊之 后的數據塊的分塊信息(對應于增加字節后增加了數據塊的情況,該數據塊對應第i個數 據塊,后續N個數據塊對應新增數據塊);
[0126] 如果N為負整數,則記錄文件B的該數據塊、其后第(-N+1)個數據塊及其后續的 數據塊的分塊信息(對應于刪除字節后減少數據塊的情況,該數據塊對應第i個數據塊,其 后第(-N+1)個數據塊對應第i+Ι個數據塊)。
[0127] 在步驟S204中,第二裝置接收到上述差異信息后,根據所述差異信息和修改后的 文件B,向第一裝置返回重構所述本地文件A所需的數據信息,例如,對于校驗信息不同的 數據塊,傳輸相應的數據塊內容的指示;對于新增加的數據塊,傳輸新增的數據塊內容;對 于缺失的數據塊,刪除相應的數據塊。這里與現有技術中服務器對客戶端的修改進行同步 的方法相同,此處不再贅述。
[0128] 作為一種優選的方式,為了減少文件切片碎片,本實施例設置定期的文件重切塊 操作。當第一裝置與第二裝置完成同步后,第一裝置根據本地文件A的文件頭S A中記錄的 所有數據塊的長度以及數據塊總數,計算一個數據塊的長度平均值,如果所述數據塊的長 度平均值小于預設閾值,則所述第一裝置對所述本地文件A以K為一個數據塊的長度重新 分塊,并通知第二裝置以相同的方式對文件B重新分塊,并計算校驗值,生成新的SA和SB。
[0129] 由于刪除字節時,不會重新進行文件切割。因此,優選地,本實施例可以選擇在增 加字節時進行文件碎片檢查。用戶增加了字節時,當第一裝置端與用戶端完成同步后,第 一裝置讀取根據S A中的記錄,計算一個數據塊的長度平均值,如果過低,則表示文件碎片較 多。此時,第一裝置和第二裝置均將對文件A和文件B重新分塊,并計算校驗值,生成新的 3&和&。分塊過程中,以K為數據塊大小,只有最后一個切塊的大小會小于K。由于重切塊 發生于文件同步之后,因此,新生成的3 4和SB是一致的。
[0130] 若以第一裝置對文件修改為例,與上述方式是類似的,只是兩個執行的裝置互換。
[0131] 如圖4所示,本實施例提供了一種單文件同步系統,包括:基于文件分塊的文件修 改裝置(即上文提到的第二裝置)和基于文件修改裝置的單文件同步裝置(即上文提到的 第一裝置),其中:
[0132] 所述單文件同步裝置為服務器,所述文件分塊裝置為客戶端;或者,所述單文件同 步裝置為客戶端,所述文件分塊裝置為服務器。
[0133] 文件分塊裝置,包括:
[0134] 劃分模塊,用于以K為數據塊的固定長度,采用定長的分塊方法將所述文件劃分 為多個數據塊,并在文件頭中記錄所有數據塊的分塊信息,所述分塊信息包括:數據塊的總 塊數以及每個數據塊的偏移值、長度、校驗值、索引編號以及實際存儲的位置鏈接;
[0135] 修改模塊,用于當在文件中增加字節時,如果在第i個數據塊中增加 k字節后,該 數據塊的長度小于等于K,則合成新的第i個數據塊;如果在第i個數據塊中增加 k字節后, 該數據塊的長度大于K甚至nK,則從增加字節處,連續截取長為K的數據塊,直至最后一個 數據塊的長度小于K,i、k、η、Κ均為大于等于1的整數,至此文件分塊結束;
[0136] 當在文件中刪除字節時,如果在第i個數據塊中刪除k字節,不會刪除至下一數據 塊,則將刪除k字節后的數據塊作為第i個數據塊;如果在第i個數據塊中刪除k字節,會 刪除至下一數據塊甚至刪除至第j個數據塊,j>i>〇,則將刪除字節起始位置之前的數據塊 作為第i個數據塊,將刪除字節至第j個數據塊的結束位置之后的數據塊作為第i+ι個數 據塊,至此文件分塊結束;
[0137] 當在文件中增加字節或者刪除字節時,在文件分塊結束后,更新頭文件中的分塊 信息。
[0138] 發送模塊,用于將生成的頭文件發送至單文件同步裝置。
[0139] 其中,所述修改模塊,用于當在文件中增加字節時,在文件分塊結束后,更新文件 頭中的分塊信息,包括:
[0140] 如果在第i個數據塊中增加 k字節后,該數據塊的長度小于等于K,合成新的第i 個數據塊后,重新計算該數據塊的校驗值和長度,并修改后續數據塊的偏移值為原偏移值 +k,并記錄在文件頭中;
[0141] 如果在第i個數據塊中增加 k字節后,該數據塊的長度大于K甚至nK,則在文件分 塊結束后,計算所述第i個數據塊的校驗值,更新其數據塊長度為Κ,計算新增數據塊的校 驗值、偏移值、長度,并修改后續數據塊的偏移值為原偏移值+k,并修改各個數據塊的索引 編號,記錄在文件頭中;
[0142] 所述修改模塊,用于當在文件中刪除字節時,所述在文件分塊結束后,更新頭文件 中的分塊信息,包括:
[0143] 如果在第i個數據塊中刪除k字節,不會刪除至下一數據塊,則重新計算該數據塊 的校驗值和長度,修改后續數據塊的偏移值為原偏移值_k,并記錄在頭文件中;
[0144] 如果在第i個數據塊中刪除k字節,會刪除至下一數據塊甚至刪除至第j個數據 塊,j>i>〇,則在文件分塊結束后,計算所述第i個數據塊的校驗值,更新其數據塊長度為刪 除字節起始位置之前的數據塊長度,將刪除字節至第j個數據塊的結束位置之后的數據塊 作為第i+Ι個數據塊,更新所述第i+Ι個數據塊的偏移值為刪除字節的起始位置、更新其數 據塊長度為自刪除字節的起始位置起至第j個數據塊結束的長度-k,并計算所述第i+Ι個 數據塊的校驗值,修改后續數據塊的偏移值為原偏移值-k,并修改后續數據塊的索引編號, 記錄在文件頭中。
[0145] 其中,單文件同步裝置,包括:
[0146] 接收模塊,用于接收文件分塊裝置對文件B增加 k字節或刪除k字節后生成的文 件頭SB,還用于接收所述文件分塊裝置返回重構本地文件A所需的數據信息;
[0147] 差異信息生成模塊,用于比對本地文件A的文件頭SA和SB,生成S A和SB的差異信 息;
[0148] 同步模塊,用于將所述差異信息發送至文件分塊裝置,并,根據所述文件分塊裝置 返回的重構本地文件A所需的數據信息更新所述本地文件A。
[0149] 其中,對于增加字節,所述差異信息包括:第i個數據塊的分塊信息,或者,第i個 數據塊和新增數據塊的分塊信息,以及后續數據塊的分塊信息和數據塊的總塊數;
[0150] 對于刪除字節,所述差異信息包括:第i個數據塊的分塊信息,或者,第i個數據塊 和第i+ι個數據塊的分塊信息,以及后續數據塊的分塊信息和數據塊的總塊數。
[0151] 其中,對于增加字節,如果在第i個數據塊中增加 k字節后,該數據塊的長度小于 等于K,則所述第i個數據塊的分塊信息包括:第i個數據塊的校驗值和長度,所述后續數 據塊的分塊信息包括:后續數據塊的偏移值;如果在第i個數據塊中增加 k字節后,該數據 塊的長度大于K甚至nK,則所述第i個數據塊的分塊信息包括:第i個數據塊的校驗值和 長度,所述新增數據塊的分塊信息包括:新增數據塊的校驗值、長度、偏移值和索引編號,所 述后續數據塊的分塊信息包括:后續數據塊的偏移值和索引編號;
[0152] 對于刪除字節,如果在第i個數據塊中刪除k字節,不會刪除至下一數據塊,所述 第i個數據塊的分塊信息包括:第i個數據塊的校驗值和長度,所述后續數據塊的分塊信息 包括:后續數據塊的偏移值;如果在第i個數據塊中刪除k字節,會刪除至下一數據塊甚至 刪除至第j個數據塊,所述第i個數據塊的分塊信息包括:第i個數據塊的校驗值和長度, 所述第i+Ι個數據塊的分塊信息包括:第i+Ι個數據塊的校驗值、長度、偏移值和索引編號, 所述后續數據塊的分塊信息包括:后續數據塊的偏移值和索引編號。
[0153] 其中,所述差異信息生成模塊,用于將本地文件A的頭文件SA和SB進行比對,生成 3&和S B的差異信息,包括:
[0154] 根據SA和SB計算文件B總數據塊減去文件A總數據塊的差值N ;
[0155] 從兩個文件的第一個數據塊開始比對,直到找到第一個校驗值不同的兩個數據 塊;
[0156] 如果N = 0,則記錄文件B的該數據塊的分塊信息以及后續數據塊的分塊信息(對 應于增加或刪除字節而沒有影響數據塊分塊個數的情況);
[0157] 如果N為正整數,則記錄文件B的該數據塊、后續N個數據塊以及第N個數據塊之 后的數據塊的分塊信息(對應于增加字節后增加了數據塊的情況,該數據塊對應第i個數 據塊,后續N個數據塊對應新增數據塊);
[0158] 如果N為負整數,則記錄文件B的該數據塊、其后第(-N+1)個數據塊及其后續的 數據塊的分塊信息(對應于刪除字節后減少數據塊的情況,該數據塊對應第i個數據塊,其 后第(-N+1)個數據塊對應第i+Ι個數據塊)。
[0159] 從上述實施例可以看出,相對于現有技術,上述實施例中提供的文件分塊方法及 裝置、文件同步方法及裝置,具有以下有益效果:
[0160] 1)對文件的修改只影響增加或刪除字節位置附近的數據塊信息,因此,對文件切 片影響較小,在同步文件時,只需要更新增加或刪除字節位置附近的數據塊的信息,傳輸的 文件內容也相應減少;2)文件切片大小不會無限制大,系統設計人員可根據系統的承受能 力設計K值,以平衡管理復雜性和文件傳輸代價;3)杜絕了大量文件碎片。
[0161] 本領域普通技術人員可以理解上述方法中的全部或部分步驟可通過程序來指令 相關硬件完成,所述程序可以存儲于計算機可讀存儲介質中,如只讀存儲器、磁盤或光盤 等。可選地,上述實施例的全部或部分步驟也可以使用一個或多個集成電路來實現。相應 地,上述實施例中的各模塊/單元可以采用硬件的形式實現,也可以采用軟件功能模塊的 形式實現。本發明不限制于任何特定形式的硬件和軟件的結合。
[0162] 以上所述僅為本發明的優選實施例而已,并非用于限定本發明的保護范圍。根據 本發明的
【發明內容】
,還可有其他多種實施例,在不背離本發明精神及其實質的情況下,熟悉 本領域的技術人員當可根據本發明作出各種相應的改變和變形,凡在本發明的精神和原則 之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。
【權利要求】
1. 一種基于文件分塊的文件修改方法,包括: 以K為數據塊的固定長度,采用定長的分塊方法將所述文件劃分為多個數據塊,并在 文件頭中記錄所有數據塊的分塊信息,所述分塊信息包括:數據塊的總塊數以及每個數據 塊的偏移值、長度、校驗值、索引編號以及實際存儲的位置鏈接; 當在文件中增加字節時,如果在第i個數據塊中增加 k字節后,該數據塊的長度小于等 于K,則合成新的第i個數據塊;如果在第i個數據塊中增加 k字節后,該數據塊的長度大 于K甚至nK,則從增加字節處,連續截取長為K的數據塊,直至最后一個數據塊的長度小于 K,i、k、η、Κ均為大于0的正整數,至此文件分塊結束; 當在文件中刪除字節時,如果在第i個數據塊中刪除k字節,不會刪除至下一數據塊, 則將刪除k字節后的數據塊作為第i個數據塊;如果在第i個數據塊中刪除k字節,會刪除 至下一數據塊甚至刪除至第j個數據塊,j>i>〇,則將刪除字節起始位置之前的數據塊作為 第i個數據塊,將刪除字節至第j個數據塊的結束位置之后的數據塊作為第i+Ι個數據塊, 至此文件分塊結束; 當在文件中增加字節或者刪除字節時,在文件分塊結束后,更新文件頭中的分塊信息。
2. 如權利要求1所述的方法,其特征在于: 所述當在文件中增加字節時,在文件分塊結束后,更新文件頭中的分塊信息,包括: 如果在第i個數據塊中增加 k字節后,該數據塊的長度小于等于K,合成新的第i個數 據塊后,重新計算該數據塊的校驗值和長度,并修改后續數據塊的偏移值為原偏移值+k,并 記錄在文件頭中; 如果在第i個數據塊中增加 k字節后,該數據塊的長度大于K甚至nK,則在文件分塊結 束后,計算所述第i個數據塊的校驗值,更新其數據塊長度為Κ,計算新增數據塊的校驗值、 偏移值、長度,并修改后續數據塊的偏移值為原偏移值+k,并修改各個數據塊的索引編號, 記錄在文件頭中。
3. 如權利要求1所述的方法,其特征在于: 所述當在文件中刪除字節時,所述在文件分塊結束后,更新頭文件中的分塊信息,包 括: 如果在第i個數據塊中刪除k字節,不會刪除至下一數據塊,則重新計算該數據塊的校 驗值和長度,修改后續數據塊的偏移值為原偏移值_k,并記錄在文件頭中; 如果在第i個數據塊中刪除k字節,會刪除至下一數據塊甚至刪除至第j個數據塊, 則在文件分塊結束后,計算所述第i個數據塊的校驗值,更新其數據塊長度為刪除 字節起始位置之前的數據塊長度,將刪除字節至第j個數據塊的結束位置之后的數據塊作 為第i+Ι個數據塊,更新所述第i+Ι個數據塊的偏移值為刪除字節的起始位置、更新其數據 塊長度為自刪除字節的起始位置起至第j個數據塊結束的長度-k,并計算所述第i+Ι個數 據塊的校驗值,修改后續數據塊的偏移值為原偏移值-k,并修改后續數據塊的索引編號,記 錄在文件頭中。
4. 一種基于如權利要求1或2或3所述的文件修改方法的單文件同步方法,包括: 第一裝置接收到第二裝置對文件B增加 k字節或刪除k字節后生成的文件頭SB ; 第一裝置將本地文件A的文件頭SA和SB進行比對,生成SA和S B的差異信息; 第一裝置將所述差異信息發送至第二裝置; 第二裝置根據所述差異信息和修改后的文件B,向第一裝置返回重構所述本地文件A 所需的數據信息,第一裝置根據所述數據信息更新所述本地文件A ; 其中,所述第一裝置為服務器,所述第二裝置為客戶端;或者,所述第一裝置為客戶端, 所述第二裝置為服務器。
5. 如權利要求4所述的方法,其特征在于: 對于增加字節,所述差異信息包括:第i個數據塊的分塊信息,或者,第i個數據塊和新 增數據塊的分塊信息,以及后續數據塊的分塊信息和數據塊的總塊數; 對于刪除字節,所述差異信息包括:第i個數據塊的分塊信息,或者,第i個數據塊和第 i+Ι個數據塊的分塊信息,以及后續數據塊的分塊信息和數據塊的總塊數。
6. 如權利要求5所述的方法,其特征在于: 對于增加字節,如果在第i個數據塊中增加 k字節后,該數據塊的長度小于等于K,則所 述第i個數據塊的分塊信息包括:第i個數據塊的校驗值和長度,所述后續數據塊的分塊信 息包括:后續數據塊的偏移值;如果在第i個數據塊中增加 k字節后,該數據塊的長度大于 K甚至nK,則所述第i個數據塊的分塊信息包括:第i個數據塊的校驗值和長度,所述新增 數據塊的分塊信息包括:新增數據塊的校驗值、長度、偏移值和索引編號,所述后續數據塊 的分塊信息包括:后續數據塊的偏移值和索引編號; 對于刪除字節,如果在第i個數據塊中刪除k字節,不會刪除至下一數據塊,所述第i 個數據塊的分塊信息包括:第i個數據塊的校驗值和長度,所述后續數據塊的分塊信息包 括:后續數據塊的偏移值;如果在第i個數據塊中刪除k字節,會刪除至下一數據塊甚至刪 除至第j個數據塊,所述第i個數據塊的分塊信息包括:第i個數據塊的校驗值和長度,所 述第i+Ι個數據塊的分塊信息包括:第i+Ι個數據塊的校驗值、長度、偏移值和索引編號,所 述后續數據塊的分塊信息包括:后續數據塊的偏移值和索引編號。
7. 如權利要求6所述的方法,其特征在于: 所述第一裝置將本地文件A的頭文件SA和SB進行比對,生成SA和S B的差異信息,包 括: 根據SA和SB計算文件B總數據塊減去文件A總數據塊的差值N ; 從兩個文件的第一個數據塊開始比對,直到找到第一個校驗值不同的兩個數據塊; 如果N = 0,則記錄文件B的該數據塊的分塊信息以及后續數據塊的分塊信息; 如果N為正整數,則記錄文件B的該數據塊、后續N個數據塊以及第N個數據塊之后的 數據塊的分塊信息; 如果N為負整數,則記錄文件B的該數據塊、其后第(-N+1)個數據塊及其后續的數據 塊的分塊信息。
8. 如權利要求4所述的方法,其特征在于: 當第一裝置與第二裝置完成同步后,第一裝置根據本地文件A的文件頭SA中記錄的所 有數據塊的長度以及數據塊總數,計算一個數據塊的長度平均值,如果所述數據塊的長度 平均值小于預設閾值,則所述第一裝置對所述本地文件A以K為一個數據塊的長度重新分 塊,并通知第二裝置以相同的方式對文件B重新分塊,并計算校驗值,生成新的S A和SB。
9. 一種基于文件分塊的文件修改裝置,包括: 劃分模塊,用于以K為數據塊的固定長度,采用定長的分塊方法將所述文件劃分為多 個數據塊,并在文件頭中記錄所有數據塊的分塊信息,所述分塊信息包括:數據塊的總塊數 以及每個數據塊的偏移值、長度、校驗值、索引編號以及實際存儲的位置鏈接; 修改模塊,用于當在文件中增加字節時,如果在第i個數據塊中增加 k字節后,該數據 塊的長度小于等于K,則合成新的第i個數據塊;如果在第i個數據塊中增加 k字節后,該 數據塊的長度大于K甚至nK,則從增加字節處,連續截取長為K的數據塊,直至最后一個數 據塊的長度小于K,i、k、η、Κ均為大于等于1的整數,至此文件分塊結束; 當在文件中刪除字節時,如果在第i個數據塊中刪除k字節,不會刪除至下一數據塊, 則將刪除k字節后的數據塊作為第i個數據塊;如果在第i個數據塊中刪除k字節,會刪除 至下一數據塊甚至刪除至第j個數據塊,j>i>〇,則將刪除字節起始位置之前的數據塊作為 第i個數據塊,將刪除字節至第j個數據塊的結束位置之后的數據塊作為第i+Ι個數據塊, 至此文件分塊結束; 當在文件中增加字節或者刪除字節時,在文件分塊結束后,更新頭文件中的分塊信 息; 發送模塊,用于將更新的頭文件發送至單文件同步裝置。
10. 如權利要求9所述的裝置,其特征在于: 所述修改模塊,用于當在文件中增加字節時,在文件分塊結束后,更新頭文件中的分塊 信息,包括: 如果在第i個數據塊中增加 k字節后,該數據塊的長度小于等于K,合成新的第i個數 據塊后,重新計算該數據塊的校驗值和長度,并修改后續數據塊的偏移值為原偏移值+k,并 記錄在文件頭中; 如果在第i個數據塊中增加 k字節后,該數據塊的長度大于K甚至nK,則在文件分塊結 束后,計算所述第i個數據塊的校驗值,更新其數據塊長度為Κ,計算新增數據塊的校驗值、 偏移值、長度,并修改后續數據塊的偏移值為原偏移值+k,并修改各個數據塊的索引編號, 記錄在頭文件中; 所述修改模塊,用于當在文件中刪除字節時,所述在文件分塊結束后,更新頭文件中的 分塊信息,包括: 如果在第i個數據塊中刪除k字節,不會刪除至下一數據塊,則重新計算該數據塊的校 驗值和長度,修改后續數據塊的偏移值為原偏移值_k,并記錄在頭文件中; 如果在第i個數據塊中刪除k字節,會刪除至下一數據塊甚至刪除至第j個數據塊, 則在文件分塊結束后,計算所述第i個數據塊的校驗值,更新其數據塊長度為刪除 字節起始位置之前的數據塊長度,將刪除字節至第j個數據塊的結束位置之后的數據塊作 為第i+Ι個數據塊,更新所述第i+Ι個數據塊的偏移值為刪除字節的起始位置、更新其數據 塊長度為自刪除字節的起始位置起至第j個數據塊結束的長度-k,并計算所述第i+Ι個數 據塊的校驗值,修改后續數據塊的偏移值為原偏移值-k,并修改后續數據塊的索引編號,記 錄在頭文件中。
11. 一種基于如權利要求9或10所述的文件修改裝置的單文件同步裝置,包括: 接收模塊,用于接收文件分塊裝置對文件B增加 k字節或刪除k字節后生成的文件頭 SB,還用于接收所述文件分塊裝置返回重構所述本地文件A所需的數據信息; 差異信息生成模塊,用于將本地文件A的頭文件SA和SB進行比對,生成SA和S B的差異 信息; 同步模塊,用于將所述差異信息發送至所述文件分塊裝置,并根據所述文件分塊裝置 返回的重構所述本地文件A所需的數據信息更新所述本地文件A。
12. 如權利要求11所述的裝置,其特征在于: 對于增加字節,所述差異信息包括:第i個數據塊的分塊信息,或者,第i個數據塊和新 增數據塊的分塊信息,以及后續數據塊的分塊信息和數據塊的總塊數; 對于刪除字節,所述差異信息包括:第i個數據塊的分塊信息,或者,第i個數據塊和第 i+Ι個數據塊的分塊信息,以及后續數據塊的分塊信息和數據塊的總塊數。
13. 如權利要求12所述的裝置,其特征在于: 對于增加字節,如果在第i個數據塊中增加 k字節后,該數據塊的長度小于等于K,則所 述第i個數據塊的分塊信息包括:第i個數據塊的校驗值和長度,所述后續數據塊的分塊信 息包括:后續數據塊的偏移值;如果在第i個數據塊中增加 k字節后,該數據塊的長度大于 K甚至nK,則所述第i個數據塊的分塊信息包括:第i個數據塊的校驗值和長度,所述新增 數據塊的分塊信息包括:新增數據塊的校驗值、長度、偏移值和索引編號,所述后續數據塊 的分塊信息包括:后續數據塊的偏移值和索引編號; 對于刪除字節,如果在第i個數據塊中刪除k字節,不會刪除至下一數據塊,所述第i 個數據塊的分塊信息包括:第i個數據塊的校驗值和長度,所述后續數據塊的分塊信息包 括:后續數據塊的偏移值;如果在第i個數據塊中刪除k字節,會刪除至下一數據塊甚至刪 除至第j個數據塊,所述第i個數據塊的分塊信息包括:第i個數據塊的校驗值和長度,所 述第i+Ι個數據塊的分塊信息包括:第i+Ι個數據塊的校驗值、長度、偏移值和索引編號,所 述后續數據塊的分塊信息包括:后續數據塊的偏移值和索引編號。
14. 如權利要求13所述的裝置,其特征在于: 所述差異信息生成模塊,用于將本地文件A的頭文件SA和SB進行比對,生成SA和S B的 差異信息,包括: 根據SA和SB計算文件B總數據塊減去文件A總數據塊的差值N ; 從兩個文件的第一個數據塊開始比對,直到找到第一個校驗值不同的兩個數據塊; 如果N = 0,則記錄文件B的該數據塊的分塊信息以及后續數據塊的分塊信息; 如果N為正整數,則記錄文件B的該數據塊、后續N個數據塊以及第N個數據塊之后的 數據塊的分塊信息; 如果N為負整數,則記錄文件B的該數據塊、其后第(-N+1)個數據塊及其后續的數據 塊的分塊信息。
15. -種單文件同步系統,包括:如權利要求9?10所述的文件修改裝置和如權利要 求11?14所述的單文件同步裝置; 其中,所述文件修改裝置為服務器,所述單文件同步裝置為客戶端;或者,所述文件修 改裝置為客戶端,所述單文件同步裝置為服務器。
【文檔編號】H04L29/08GK104092780SQ201410368093
【公開日】2014年10月8日 申請日期:2014年7月29日 優先權日:2014年7月29日
【發明者】王淑玲, 張云勇, 房秉毅 申請人:中國聯合網絡通信集團有限公司