一種對(duì)比打包文件的方法,裝置及其系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開(kāi)了一種對(duì)比打包文件的方法,裝置以及系統(tǒng)。該方法包括兩條獨(dú)立的流水線,每條流水線內(nèi)包括5個(gè)獨(dú)立的線程,5個(gè)獨(dú)立的任務(wù)隊(duì)列和一個(gè)差異結(jié)果集合。兩條流水線在程序啟動(dòng)時(shí)同時(shí)運(yùn)行,其每條流水線對(duì)文件的操作包括查詢每一個(gè)包內(nèi)文件名對(duì)應(yīng)的包內(nèi)地址;根據(jù)文件在包內(nèi)的地址由低到高排序,將排序的文件名存入文件名對(duì)比隊(duì)列中;依次運(yùn)行文件名比較線程,文件校驗(yàn)值比較線程,文件讀取線程,文件解壓線程和文件內(nèi)容比較線程;最后從差異結(jié)果集合中取出所有文件名,并輸出。本發(fā)明相對(duì)于傳統(tǒng)的比較方式,有較快的比較速度。特別是通過(guò)兩個(gè)獨(dú)立的硬盤分別存儲(chǔ)要對(duì)比的打包文件,兩個(gè)流水線分別對(duì)應(yīng)一個(gè)硬盤上的打包文件,能極大的提高效率,縮短時(shí)間。
【專利說(shuō)明】 一種對(duì)比打包文件的方法,裝置及其系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種對(duì)比打包文件的方法,特別是一種能對(duì)比打包文件的裝置以及系統(tǒng)。
【背景技術(shù)】
[0002]在大型客戶端中所保存的資源文件通常是以壓縮包的形式存在?,F(xiàn)有的對(duì)比打包文件方法在對(duì)比兩個(gè)壓縮包中的文件內(nèi)容是否完全一致時(shí)需要如下的三步處理過(guò)程:
第一步,將第一個(gè)壓縮包內(nèi)的所有文件內(nèi)容解壓縮到硬盤上;
第二步,再將第二個(gè)壓縮包內(nèi)的所有文件內(nèi)容解壓縮到硬盤上;
第三步,對(duì)比兩份解壓縮后的相對(duì)應(yīng)文件,確認(rèn)所述兩份文件內(nèi)容是否相同。
[0003]但所述這種現(xiàn)有的處理方式有如下四個(gè)重要的缺點(diǎn):
缺點(diǎn)1,由于所述現(xiàn)有處理過(guò)程的第一步和第二步中的解壓縮處理需要進(jìn)行硬盤的讀寫操作,因此處理速度相對(duì)變得非常緩慢,特別是當(dāng)壓縮包越大,所需要的讀寫時(shí)間就越長(zhǎng);
缺點(diǎn)2,由于所述現(xiàn)有處理過(guò)程第三步的對(duì)比過(guò)程均為單一線程,如在文件讀取過(guò)程中無(wú)法同時(shí)進(jìn)行解壓縮處理,而在進(jìn)行解壓縮處理過(guò)程中又無(wú)法同時(shí)進(jìn)行對(duì)比文件的處理;缺點(diǎn)3,在執(zhí)行完所有處理過(guò)程并輸出對(duì)比結(jié)果后還需要將前兩步解壓到硬盤上的文件內(nèi)容進(jìn)行清理,從而減少對(duì)硬盤空間的占用,但同時(shí)該過(guò)程也需要一定的時(shí)間來(lái)進(jìn)行硬盤的寫操作;
缺點(diǎn)4,現(xiàn)有的方法在進(jìn)行文件讀取過(guò)程中,由于沒(méi)有考慮壓縮包內(nèi)文件在壓縮包里面的地址順序,而根據(jù)硬盤的機(jī)械特性,硬盤磁頭在高地址與低地址之間反復(fù)跳動(dòng)尋址,將影響文件讀取的效率。因此現(xiàn)有的不根據(jù)地址順序的讀取會(huì)降低硬盤的讀取效率。
[0004]因此所述的現(xiàn)有的對(duì)比打包文件方法的效率非常低,當(dāng)打包文件越大,其所需的時(shí)間也越長(zhǎng)。
【發(fā)明內(nèi)容】
[0005]為了解決現(xiàn)有技術(shù)中所存在的上述問(wèn)題,本發(fā)明的目的是提供一種高效的對(duì)比打包文件的方法,及其對(duì)應(yīng)該算法的對(duì)比打包文件的裝置。
[0006]本發(fā)明解決其技術(shù)問(wèn)題所采用的技術(shù)方案是:
一種對(duì)比打包文件的方法,包括兩條獨(dú)立的流水線,每條流水線內(nèi)包括5個(gè)獨(dú)立的線程,5個(gè)獨(dú)立的任務(wù)隊(duì)列和一個(gè)差異結(jié)果集合。整個(gè)方法的進(jìn)程里面有10個(gè)獨(dú)立線程,10個(gè)任務(wù)隊(duì)列和兩個(gè)差異結(jié)果集。
[0007]進(jìn)一步,每個(gè)線程獨(dú)立完成自己的工作,即每次從自己的任務(wù)隊(duì)列中取出一個(gè)任務(wù)來(lái)完成,之后放入下一個(gè)任務(wù)隊(duì)列中。由于線程是可以獨(dú)立使用CPU內(nèi)核進(jìn)行工作的,因此所有的線程不會(huì)阻塞,CPU達(dá)到最高的運(yùn)轉(zhuǎn)效率。且線程和線程間不會(huì)產(chǎn)生較為復(fù)雜的影響。
[0008]進(jìn)一步,每條流水線中的獨(dú)立線程分別為:文件名比較線程,文件校驗(yàn)值比較線程,文件讀取線程,文件解壓線程,文件內(nèi)容比較線程。且此5個(gè)線程并行工作。
[0009]進(jìn)一步,其每條流水線中的獨(dú)立隊(duì)列為:文件名比較隊(duì)列,文件校驗(yàn)值比較隊(duì)列,文件讀取隊(duì)列,文件解壓隊(duì)列,文件內(nèi)容比較隊(duì)列。
[0010]進(jìn)一步,用于對(duì)比的包文件中,存儲(chǔ)了每一個(gè)包內(nèi)的文件名所對(duì)應(yīng)的包內(nèi)文件地址和校驗(yàn)值。
[0011]進(jìn)一步,校驗(yàn)值可選用CRC。
[0012]進(jìn)一步,差異結(jié)果集合中存儲(chǔ)了內(nèi)容上有差異的文件。即文件對(duì)比的輸出結(jié)果。
[0013]進(jìn)一步,兩條流水線在程序啟動(dòng)時(shí)同時(shí)運(yùn)行,其每條流水線對(duì)文件的操作過(guò)程是:
1)查詢每一個(gè)包內(nèi)文件名對(duì)應(yīng)的包內(nèi)地址;
2)根據(jù)文件在包內(nèi)的地址由低到高排序;
3)將排序的文件名存入文件名對(duì)比隊(duì)列中;
4)運(yùn)行:文件名比較線程,文件校驗(yàn)值比較線程,文件讀取線程,文件解壓線程和文件內(nèi)容比較線程;
5)從差異結(jié)果集合中取出所有文件名,并輸出。
[0014]進(jìn)一步,“文件名比較線程”工作過(guò)程如下:
1)取出本流水線“文件名比較隊(duì)列”中的一個(gè)文件;
2)在另一條流水線的“文件名比較隊(duì)列”中查找此文件名;
3)若能找到,則將此文件放入本流水線的“文件校驗(yàn)值對(duì)比隊(duì)列”,并將其從本流水線的“文件名比較隊(duì)列”中刪除。若不能找到則將其存入“差異結(jié)果集合”中;
4)返回步驟1),以便取下一個(gè)文件。
[0015]進(jìn)一步,“文件校驗(yàn)值對(duì)比線程”工作過(guò)程如下:
1)取出本流水線“文件校驗(yàn)值對(duì)比隊(duì)列”中的一個(gè)文件;
2)在另一條流水線的“文件校驗(yàn)值對(duì)比隊(duì)列”中查找此文件名;
3)若能找到,跳轉(zhuǎn)到步驟4)。若沒(méi)有找到,則不做任何處理,跳轉(zhuǎn)到步驟5);
4)對(duì)比兩個(gè)文件的校驗(yàn)值值。若此時(shí)兩個(gè)文件的校驗(yàn)值不同則將其存入“差異結(jié)果集合”中。則若此時(shí)兩個(gè)文件的校驗(yàn)值值相同,則將此文件放入本流水線的“文件讀取隊(duì)列”,并將其從本流水線的“文件校驗(yàn)值對(duì)比隊(duì)列”中刪除;
5)返回步驟1),以便取下一個(gè)文件。
[0016]進(jìn)一步,“文件讀取線程”工作過(guò)程如下:
1)取出本流水線“文件讀取隊(duì)列”中的一個(gè)文件;
2)將文件內(nèi)容讀取到內(nèi)存中;
3)將此文件放入本流水線的“文件解壓隊(duì)列”,并將其從本流水線的“文件讀取隊(duì)列”中刪除;
4)返回步驟1,以便取下一個(gè)文件。
[0017]進(jìn)一步,“文件解壓線程”工作過(guò)程如下:
1)取出本流水線“文件解壓隊(duì)列”中的一個(gè)文件;
2)將文件內(nèi)容在內(nèi)存中解壓; 3)將此文件放入本流水線的“文件內(nèi)容比較隊(duì)列”,并將其從本流水線的“文件解壓隊(duì)列”中刪除;
4)返回步驟1,以便取下一個(gè)文件。
[0018]進(jìn)一步,“文件內(nèi)容比較線程”工作過(guò)程如下:
1)取出本流水線“文件內(nèi)容比較隊(duì)列”中的一個(gè)文件;
2)在另一條流水線的“文件內(nèi)容比較隊(duì)列”中查找此文件名;
3)若能找到,則轉(zhuǎn)到步驟4。若沒(méi)有找到,則不做任何處理,跳轉(zhuǎn)到步驟5;
4)比較文件內(nèi)容,若此時(shí)兩個(gè)文件內(nèi)容不同,則將其存入“差異結(jié)果集合”中。則若此時(shí)兩個(gè)文件的內(nèi)容相同,將其從本流水線的“文件內(nèi)容比較隊(duì)列”中刪除;
5)返回步驟1,以便取下一個(gè)文件。
[0019]進(jìn)一步,文件名比較線程工作過(guò)程如下:當(dāng)所有隊(duì)列為空時(shí),則表明所有文件已經(jīng)比較完成。此時(shí)輸出“差異結(jié)果集合”中的文件,此集合中的文件即為所求。
[0020]進(jìn)一步,用于此方法的設(shè)備或系統(tǒng)有兩個(gè)獨(dú)立的硬盤,每個(gè)硬盤上存儲(chǔ)一份需要對(duì)比的打包文件,且每個(gè)流水線對(duì)應(yīng)一個(gè)硬盤。
[0021]進(jìn)一步,兩個(gè)獨(dú)立硬盤可以是通過(guò)網(wǎng)絡(luò)映射或類似的方法與設(shè)備或系統(tǒng)進(jìn)行連接。
[0022]進(jìn)一步,用于此方法的設(shè)備或系統(tǒng),包括處理器用于數(shù)據(jù)的計(jì)算處理,輸入部用于輸入處理,輸出部用于輸出結(jié)果,主存儲(chǔ)部用于存儲(chǔ)對(duì)比方法所需要的程序指令代碼,輔存儲(chǔ)部用于文件隊(duì)列的存儲(chǔ)以及存儲(chǔ)解壓縮時(shí)所產(chǎn)生的臨時(shí)文件,外部存儲(chǔ)部用于存儲(chǔ)打包文件的數(shù)據(jù),差異結(jié)果集合中存儲(chǔ)了內(nèi)容上有差異的文件。
[0023]進(jìn)一步,所述主存儲(chǔ)部包括流水線流程控制以及兩條相互獨(dú)立的流水線流程。
[0024]進(jìn)一步,所述流水線流程控制中包括:流水線進(jìn)程管理部用于管理協(xié)調(diào)和調(diào)度所述的兩條相互獨(dú)立的流水線流程,線程管理部用于管理調(diào)度流水線流程,文件名比較處理部對(duì)應(yīng)文件名比較,文件校驗(yàn)值比較處理部對(duì)應(yīng)文件校驗(yàn)值比較,文件內(nèi)容比較處理部對(duì)應(yīng)文件內(nèi)容比較。
[0025]進(jìn)一步,所述輔存儲(chǔ)部用于存儲(chǔ)對(duì)應(yīng)所述兩條相互獨(dú)立流水線流程所需的文件名比較隊(duì)列,文件校驗(yàn)值比較隊(duì)列,文件讀取隊(duì)列,文件解壓隊(duì)列,文件內(nèi)容比較隊(duì)列。
[0026]本發(fā)明的有益效果是:兩個(gè)包對(duì)應(yīng)的兩個(gè)流水線并行工作,10個(gè)線程負(fù)責(zé)文件比較的各個(gè)階段并且能并行工作,且無(wú)需對(duì)包內(nèi)文件依次解壓到硬盤上。相對(duì)于傳統(tǒng)的比較方式,有較快的比較速度。特別是通過(guò)兩個(gè)獨(dú)立的硬盤分別存儲(chǔ)要對(duì)比的打包文件,兩個(gè)流水線分別對(duì)應(yīng)一個(gè)硬盤上的打包文件,能極大的提高效率,縮短時(shí)間。
【專利附圖】
【附圖說(shuō)明】
[0027]下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步說(shuō)明。
[0028]圖1是本發(fā)明所提打包文件對(duì)比方法的兩條流水線工作示意圖;
圖2是本發(fā)明所提打包文件對(duì)比裝置即系統(tǒng)的框架圖;
圖3是流水線處理流程圖;
圖4是文件名比較線程處理流程圖;
圖5是文件校驗(yàn)值比較線程處理流程圖; 圖6是文件讀取線程處理流程圖;
圖7是文件解壓線程處理流程圖;
圖8是文件內(nèi)容比較線程處理流程圖;
圖中I處理器,2輸入部,3輸出部,4主存儲(chǔ)部,5輔存儲(chǔ)部,20外部存儲(chǔ)部,21存儲(chǔ)A,22存儲(chǔ)B,30輸出:差異結(jié)果集合,
110流水線流程控制,120流水線流程A,130流水線流程B,
210打包文件A,220打包文件B,
310文件名差異結(jié)果集合,320文件校驗(yàn)值差異結(jié)果集合,330,文件內(nèi)容差異結(jié)果集入I=I,
C130文件名比較,C140文件校驗(yàn)值比較,C150文件內(nèi)容比較,
SlO流水線開(kāi)始,S20查詢每一個(gè)包內(nèi)文件名對(duì)應(yīng)的包內(nèi)地址,S30根據(jù)文件在包內(nèi)地址由低到高進(jìn)行排序,S40將排序的文件名存入“文件對(duì)比隊(duì)列”中,S50運(yùn)行文件名比較線程,文件校驗(yàn)值比較線程,文件解壓線程,文件比較線程,S60所有線程中的隊(duì)列為空?S70等待線程運(yùn)行一段時(shí)間,S80將對(duì)比結(jié)果輸出到對(duì)應(yīng)的差異結(jié)果集合中,S90流水線結(jié)束,
SllO流水線進(jìn)程管理部,S120線程管理部A.,S130線程管理部B,S140文件名比較處理部,S150文件校驗(yàn)值比較處理部,S160文件內(nèi)容比較處理部,
S210文件名比較線程A,S220文件校驗(yàn)值比較線程A,S230文件讀取線程A,S240文件解壓線程A,S250文件內(nèi)容比較線程A,
D210文件名比較隊(duì)列A,D220文件校驗(yàn)值比較隊(duì)列A,D230文件讀取隊(duì)列A,D240文件解壓隊(duì)列A,D250文件內(nèi)容比較隊(duì)列A,
S310文件名比較線程B,S320文件校驗(yàn)值比較線程B,S330文件讀取線程B,S340文件解壓線程B,S350文件內(nèi)容比較線程B,
D310文件名比較隊(duì)列B,D320文件校驗(yàn)值比較隊(duì)列B,D330文件讀取隊(duì)列B,D340文件解壓隊(duì)列B,D350文件內(nèi)容比較隊(duì)列B,
St印110線程開(kāi)始,St印120取出本流水線“文件名比較隊(duì)列”中的一個(gè)文件,St印130能否在另一條流水線的“文件名比較隊(duì)列”中查找到此文件名? St印140將此文件放入本流水線的“文件校驗(yàn)值對(duì)比隊(duì)列”,St印150將此文件從本流水線的“文件名比較隊(duì)列”中刪除,St印160將其存入“文件名差異結(jié)果集合”,Stepl70所有文件比較完成?St印180線程結(jié)束,
St印210線程開(kāi)始,St印220取出本流水線“文件校驗(yàn)值對(duì)比隊(duì)列”中的一個(gè)文件,St印230能否在另一條流水線的“文件校驗(yàn)值對(duì)比隊(duì)列”中查找到此文件名? Step240兩個(gè)文件的校驗(yàn)值是否相同?,St印250將此文件名存入“文件校驗(yàn)值差異結(jié)果集合”,St印260將此文件放入本流水線的“文件讀取隊(duì)列”,Step270將此文件從本流水線的“文件校驗(yàn)值對(duì)比隊(duì)列”中刪除,St印280所有文件比較完成? St印290線程結(jié)束,
Step310線程開(kāi)始,Step320取出本流水線“文件讀取隊(duì)列”中的一個(gè)文件,Step330將文件內(nèi)容讀取到內(nèi)存之中,Step340將此文件放入本流水線的“文件解壓隊(duì)列”,St印350將此文件從本流水線的“文件讀取隊(duì)列”中刪除,St印360所有文件比較完成?Step370線程結(jié)束, St印410線程開(kāi)始,St印420取出本流水線“文件解壓隊(duì)列”中的一個(gè)文件,St印430將文件內(nèi)容在內(nèi)存中解壓,St印440將此文件放入本流水線的“文件內(nèi)容比較隊(duì)列”,St印450將此文件從本流水線的“文件解壓隊(duì)列”中刪除,St印460所有文件比較完成?St印470線程結(jié)束,
St印510線程開(kāi)始,St印520取出本流水線“文件內(nèi)容對(duì)比隊(duì)列”中的一個(gè)文件,St印530能否在另一條流水線的“文件內(nèi)容對(duì)比隊(duì)列”中查找到此文件名? St印540兩個(gè)文件的內(nèi)容是否相同? St印550將此文件從本流水線的“文件內(nèi)容對(duì)比隊(duì)列”中刪除,St印560將此文件名存入“文件內(nèi)容差異結(jié)果集合”,Step570所有文件比較完成?Step580線程結(jié)束。
【具體實(shí)施方式】
[0029]參照?qǐng)D1,本發(fā)明所提出的打包文件對(duì)比方法的的兩條流水線工作方式是:
兩條流水線分別從存儲(chǔ)A21中讀取打包文件A210,以及從存儲(chǔ)B22中讀取打包文件B220。
[0030]所讀入的文件信息分別輸入流水線流程A120和流水線流程B130。
[0031]在流水線流程A120之中包含五個(gè)獨(dú)立線程:文件名比較線程A S210,文件校驗(yàn)值比較線程A S220,文件讀取線程A S230,文件解壓線程A S240,文件內(nèi)容比較線程A S250。所述的5個(gè)線程并行工作。
[0032]在流水線流程A120之中包含五個(gè)獨(dú)立隊(duì)列:文件名比較隊(duì)列AD210,文件校驗(yàn)值比較隊(duì)列AD220,文件讀取隊(duì)列AD230,文件解壓隊(duì)列AD240,文件內(nèi)容比較隊(duì)列AD250。
[0033]在流水線流程B130之中包含五個(gè)獨(dú)立線程:文件名比較線程B S310,文件校驗(yàn)值比較線程B S320,文件讀取線程B S330,文件解壓線程B S340,文件內(nèi)容比較線程B S350。所述的5個(gè)線程并行工作。
[0034]在流水線流程B130之中包含五個(gè)獨(dú)立隊(duì)列:文件名比較隊(duì)列BD310,文件校驗(yàn)值比較隊(duì)列BD320,文件讀取隊(duì)列BD330,文件解壓隊(duì)列BD340,文件內(nèi)容比較隊(duì)列BD350。
[0035]用于對(duì)比的包文件中,存儲(chǔ)了每一個(gè)包內(nèi)的文件名所對(duì)應(yīng)的包內(nèi)文件地址和校驗(yàn)值。該校驗(yàn)值可選用CRC。
[0036]流水線流程A120和流水線流程B130在程序啟動(dòng)時(shí)同時(shí)運(yùn)行,流水線流程A120對(duì)文件的操作過(guò)程是:
O查詢打包文件A210內(nèi)每一個(gè)文件名對(duì)應(yīng)的包內(nèi)地址;
2)根據(jù)文件在包內(nèi)的地址由低到高排序;
3)將排序的文件名存入文件名對(duì)比隊(duì)列D210中;
4)運(yùn)行:文件名比較線程S210,文件校驗(yàn)值比較線程S220,文件讀取線程S230,文件解壓線程S240和文件內(nèi)容比較線程S250 ;
流水線流程B130對(duì)文件的操作過(guò)程是:
O查詢打包文件B220內(nèi)每一個(gè)文件名對(duì)應(yīng)的包內(nèi)地址;
2)根據(jù)文件在包內(nèi)的地址由低到高排序;
3)將排序的文件名存入文件名對(duì)比隊(duì)列D310中;
4)運(yùn)行:文件名比較線程S310,文件校驗(yàn)值比較線程S320,文件讀取線程S330,文件解壓線程S340和文件內(nèi)容比較線程S350 ;
兩條流水線通過(guò)比較C130,C140, C150分別進(jìn)行文件名比較,文件校驗(yàn)值比較以及文件內(nèi)容比較,講比較的結(jié)果輸出到差異結(jié)果集合30。
[0037]差異結(jié)果集合30中存儲(chǔ)了內(nèi)容上有差異的文件。即文件對(duì)比的輸出結(jié)果:文件名差異結(jié)果集合310,文件校驗(yàn)值差異結(jié)果集合320,文件內(nèi)容差異結(jié)果集合330。
[0038]參照?qǐng)D2,利用本發(fā)明所提出的打包文件對(duì)比方法的裝置以及系統(tǒng)包括以下模塊:處理器I用于數(shù)據(jù)的計(jì)算處理(包含多線程多內(nèi)核的通用CPU),輸入部2用于輸入處理(特別是用于包文件的讀取),輸出部3用于輸出結(jié)果,主存儲(chǔ)部4用于存儲(chǔ)對(duì)比方法所需要的程序指令代碼,輔存儲(chǔ)部5用于文件隊(duì)列的存儲(chǔ)以及存儲(chǔ)解壓縮時(shí)所產(chǎn)生的臨時(shí)文件,夕卜部存儲(chǔ)部20用于存儲(chǔ)打包文件的數(shù)據(jù),外部存儲(chǔ)部20可包括存儲(chǔ)A21用于存儲(chǔ)打包文件A210,存儲(chǔ)B22用于存儲(chǔ)打包文件B220,差異結(jié)果集合30中存儲(chǔ)了內(nèi)容上有差異的文件。即文件對(duì)比的輸出結(jié)果:文件名差異結(jié)果集合310,文件校驗(yàn)值差異結(jié)果集合320,文件內(nèi)容差異結(jié)果集合330。
[0039]主存儲(chǔ)部4主要包括三大部分:流水線流程控制110,流水線流程A120,流水線流程 B130。
[0040]流水線流程控制110中包括:流水線進(jìn)程管理部SllO用于管理協(xié)調(diào)和調(diào)度流水線流程A120和水線流程B130,線程管理部S120用于管理調(diào)度流水線流程A120,線程管理部BS130用于管理調(diào)度流水線流程B130,文件名比較處理部S140對(duì)應(yīng)文件名比較C130,文件校驗(yàn)值比較處理部S150對(duì)應(yīng)文件校驗(yàn)值比較C140,文件內(nèi)容比較處理部S160對(duì)應(yīng)文件內(nèi)容比較C150。
[0041]輔存儲(chǔ)部5用于存儲(chǔ):對(duì)應(yīng)流水線流程A120的文件名比較隊(duì)列AD210,文件校驗(yàn)值比較隊(duì)列AD220,文件讀取隊(duì)列A D230,文件解壓隊(duì)列AD240,文件內(nèi)容比較隊(duì)列AD250 ;對(duì)應(yīng)流水線流程B130的文件名比較隊(duì)列BD310,文件校驗(yàn)值比較隊(duì)列BD320,文件讀取隊(duì)列BD330,文件解壓隊(duì)列BD340,文件內(nèi)容比較隊(duì)列BD350。
[0042]參照?qǐng)D3,每一個(gè)流水線所進(jìn)行的處理包括以下步驟:
SlO流水線開(kāi)始,
S20查詢每一個(gè)包內(nèi)文件名對(duì)應(yīng)的包內(nèi)地址,
S30根據(jù)文件在包內(nèi)地址由低到高進(jìn)行排序,
S40將排序的文件名存入“文件對(duì)比隊(duì)列”中,
S50運(yùn)行文件名比較線程,文件校驗(yàn)值比較線程,文件解壓線程,文件比較線程,
S60判斷所有線程中的隊(duì)列為空?,
S70若判斷不為空則等待線程運(yùn)行一段時(shí)間,
S80若判斷唯恐則將對(duì)比結(jié)果輸出到對(duì)應(yīng)的差異結(jié)果集合中,
S90流水線結(jié)束。
[0043]參照?qǐng)D4,文件名比較線程包括以下步驟:
StepllO線程開(kāi)始,
St印120取出本流水線“文件名比較隊(duì)列”中的一個(gè)文件,
St印130判斷能否在另一條流水線的“文件名比較隊(duì)列”中查找到此文件名?
Stepl60若不存在,將其存入“文件名差異結(jié)果集合” St印140否則將此文件放入本流水線的“文件校驗(yàn)值對(duì)比隊(duì)列”,
St印150將此文件從本流水線的“文件名比較隊(duì)列”中刪除,
St印170判斷所有文件比較完成?
若沒(méi)有完成,則跳回St印120處理下一個(gè)文件;
否則線程結(jié)束Stepl80。
[0044]參照?qǐng)D5,文件校驗(yàn)值比較線程包括以下步驟:
Step210線程開(kāi)始,
St印220取出本流水線“文件校驗(yàn)值對(duì)比隊(duì)列”中的一個(gè)文件,
St印230判斷能否在另一條流水線的“文件校驗(yàn)值對(duì)比隊(duì)列”中查找到此文件名?若不能則跳至St印280,
Step240判斷兩個(gè)文件的校驗(yàn)值是否相同?
若判斷校驗(yàn)值不同則跳至Step250將此文件名存入“文件校驗(yàn)值差異結(jié)果集合”,
若判斷校驗(yàn)值相同則跳至Step260將此文件放入本流水線的“文件讀取隊(duì)列”,
St印270將此文件從本流水線的“文件校驗(yàn)值對(duì)比隊(duì)列”中刪除,
St印280判斷所有文件比較完成?
若全部執(zhí)行完畢則執(zhí)行Step290線程結(jié)束,
否則跳至Step220處理下一個(gè)文件。
[0045]參照?qǐng)D6,文件讀取線程包括以下步驟:
Step310線程開(kāi)始,
Step320取出本流水線“文件讀取隊(duì)列”中的一個(gè)文件,
St印330將文件內(nèi)容讀取到內(nèi)存之中,
Step340將此文件放入本流水線的“文件解壓隊(duì)列”,
St印350將此文件從本流水線的“文件讀取隊(duì)列”中刪除,St印360判斷所有文件比較完成?
若是則跳至St印370線程結(jié)束,反之則跳至St印320處理下一個(gè)文件。
[0046]參照?qǐng)D7,文件解壓線程包括以下步驟:
Step410線程開(kāi)始,
St印420取出本流水線“文件解壓隊(duì)列”中的一個(gè)文件,
St印430將文件內(nèi)容在內(nèi)存中解壓,
St印440將此文件放入本流水線的“文件內(nèi)容比較隊(duì)列”,
St印450將此文件從本流水線的“文件解壓隊(duì)列”中刪除,
St印460所有文件比較完成?
若是則跳至St印470線程結(jié)束,反之則跳至St印420處理下一個(gè)文件。
[0047]參照?qǐng)D8,文件內(nèi)容比較線程包括以下步驟:
Step510線程開(kāi)始,
St印520取出本流水線“文件內(nèi)容對(duì)比隊(duì)列”中的一個(gè)文件,
St印530能否在另一條流水線的“文件內(nèi)容對(duì)比隊(duì)列”中查找到此文件名?
若不能查找到,則跳至St印570,反之則跳至St印540 St印540判斷兩個(gè)文件的內(nèi)容是否相同?若相同則St印550將此文件從本流水線的“文件內(nèi)容對(duì)比隊(duì)列”中刪除,
若不相同則Step560將此文件名存入“文件內(nèi)容差異結(jié)果集合”,
St印570判斷所有文件比較完成?
若全部完成則跳至St印580線程結(jié)束,反之則跳至St印520處理下一個(gè)文件。
[0048]具體實(shí)施例一:
若有兩個(gè)包文件A和B,其中A這個(gè)包中有a、b、c三個(gè)文件,B這個(gè)包中有a、b、c、d四個(gè)文件,則在文件名比較C130處可率先區(qū)分出d文件是一個(gè)B包中專有的文件,因此將其輸出到差異結(jié)果集30之中的文件名差異結(jié)果集合310之后也就不需要再將d文件進(jìn)行讀取、解壓、內(nèi)容比較等一系列操作。從而可以大大提高處理效率,節(jié)省時(shí)間。
[0049]具體實(shí)施例二:
若有A、B兩套包。其中包含的文件信息如下:
【權(quán)利要求】
1.一種對(duì)比打包文件的方法,其特征在于:包括兩條獨(dú)立的流水線,每條流水線內(nèi)包括: 5個(gè)獨(dú)立的線程:文件名比較線程,文件校驗(yàn)值比較線程,文件讀取線程,文件解壓線程,文件內(nèi)容比較線程, 5個(gè)獨(dú)立的任務(wù)隊(duì)列:文件名比較隊(duì)列,文件校驗(yàn)值比較隊(duì)列,文件讀取隊(duì)列,文件解壓隊(duì)列,文件內(nèi)容比較隊(duì)列, I個(gè)差異結(jié)果集合, 所述的每個(gè)線程獨(dú)立完成自己的工作,即每次從自己的任務(wù)隊(duì)列中取出一個(gè)任務(wù)來(lái)完成,之后放入下一個(gè)任務(wù)隊(duì)列中。
2.根據(jù)權(quán)利要求1所述的一種對(duì)比打包文件的方法,其特征在于:用于對(duì)比的打包文件中,存儲(chǔ)了每一個(gè)包內(nèi)的文件名所對(duì)應(yīng)的包內(nèi)文件地址和校驗(yàn)值。
3.根據(jù)權(quán)利要求2所述的一種對(duì)比打包文件的方法,其特征在于:校驗(yàn)值可選用CRC。
4.根據(jù)權(quán)利要求1所述的一種對(duì)比打包文件的方法,其特征在于:所述的差異結(jié)果集合中存儲(chǔ)了文件名,文件校驗(yàn)值,文件內(nèi)容上有差異的文件。
5.根據(jù)權(quán)利要求1所述的一種對(duì)比打包文件的方法,其特征在于:所述的兩條流水線在程序啟動(dòng)時(shí)同時(shí)運(yùn)行,其每條流水線對(duì)文件的操作過(guò)程是: 1)查詢每一個(gè)包內(nèi)文件名對(duì)應(yīng)的包內(nèi)地址; 2)根據(jù)文件在包內(nèi)的地址由低到高排序; 3)將排序的文件名存入文件名對(duì)比隊(duì)列中; 4)運(yùn)行:文件名比較線程,文件校驗(yàn)值比較線程,文件讀取線程,文件解壓線程和文件內(nèi)容比較線程; 5)從差異結(jié)果集合中取出所有文件名,并輸出。
6.根據(jù)權(quán)利要求5所述的一種對(duì)比打包文件的方法,其特征在于:“文件名比較線程”工作過(guò)程如下: 1)取出本流水線“文件名比較隊(duì)列”中的一個(gè)文件; 2)在另一條流水線的“文件名比較隊(duì)列”中查找此文件名; 3)若能找到,則將此文件放入本流水線的“文件校驗(yàn)值對(duì)比隊(duì)列”,并將其從本流水線的“文件名比較隊(duì)列”中刪除,若不能找到則將其存入“差異結(jié)果集合”中; 4)返回步驟1),以便取下一個(gè)文件。
7.根據(jù)權(quán)利要求5所述的一種對(duì)比打包文件的方法,其特征在于:“文件校驗(yàn)值對(duì)比線程”工作過(guò)程如下: 1)取出本流水線“文件校驗(yàn)值對(duì)比隊(duì)列”中的一個(gè)文件; 2)在另一條流水線的“文件校驗(yàn)值對(duì)比隊(duì)列”中查找此文件名; 3)若能找到,跳轉(zhuǎn)到步驟4),若沒(méi)有找到,則不做任何處理,跳轉(zhuǎn)到步驟5); 4)對(duì)比兩個(gè)文件的校驗(yàn)值值,若此時(shí)兩個(gè)文件的校驗(yàn)值不同則將其存入“差異結(jié)果集合”中,則若此時(shí)兩個(gè)文件的校驗(yàn)值值相同,則將此文件放入本流水線的“文件讀取隊(duì)列”,并將其從本流水線的“文件校驗(yàn)值對(duì)比隊(duì)列”中刪除; 5)返回步驟1),以便取下一個(gè)文件。
8.根據(jù)權(quán)利要求5所述的一種對(duì)比打包文件的方法,其特征在于:“文件讀取線程”工作過(guò)程如下: 1)取出本流水線“文件讀取隊(duì)列”中的一個(gè)文件; 2)將文件內(nèi)容讀取到內(nèi)存中; 3)將此文件放入本流水線的“文件解壓隊(duì)列”,并將其從本流水線的“文件讀取隊(duì)列”中刪除; 4)返回步驟1,以便取下一個(gè)文件。
9.根據(jù)權(quán)利要求5所述的一種對(duì)比打包文件的方法,其特征在于:“文件解壓線程”工作過(guò)程如下: 1)取出本流水線“文件解壓隊(duì)列”中的一個(gè)文件; 2)將文件內(nèi)容在內(nèi)存中解壓; 3)將此文件放入本流水線的“文件內(nèi)容比較隊(duì)列”,并將其從本流水線的“文件解壓隊(duì)列”中刪除; 4)返回步驟1,以便取下一個(gè)文件。
10.根據(jù)權(quán)利要求5所述的一種對(duì)比打包文件的方法,其特征在于:“文件內(nèi)容比較線程”工作過(guò)程如下: 1)取出本流水線“文件內(nèi)容比較隊(duì)列”中的一個(gè)文件; 2)在另一條流水線的“文件內(nèi)容比較隊(duì)列”中查找此文件名; 3)若能找到,則轉(zhuǎn)到步驟4,若沒(méi)有找到,則不做任何處理,跳轉(zhuǎn)到步驟5; 4)比較文件內(nèi)容,若此時(shí)兩個(gè)文件內(nèi)容不同,則將其存入“差異結(jié)果集合”中,則若此時(shí)兩個(gè)文件的內(nèi)容相同,將其從本流水線的“文件內(nèi)容比較隊(duì)列”中刪除; 5)返回步驟1,以便取下一個(gè)文件。
11.根據(jù)權(quán)利要求5所述的一種對(duì)比打包文件的方法,其特征在于:當(dāng)所有隊(duì)列為空時(shí),則表明所有文件已經(jīng)比較完成,此時(shí)輸出“差異結(jié)果集合”中的內(nèi)容,所述集合中的文件即為所求的比較結(jié)果。
12.根據(jù)權(quán)利要求1所述的一種對(duì)比打包文件的方法,其特征在于:此方法需要兩個(gè)獨(dú)立的硬盤,每個(gè)硬盤上存儲(chǔ)一份需要對(duì)比的打包文件,且每個(gè)流水線對(duì)應(yīng)一個(gè)硬盤。
13.根據(jù)權(quán)利要求12所述的一種對(duì)比打包文件的方法,其特征在于:所述的兩個(gè)獨(dú)立硬盤可以是通過(guò)網(wǎng)絡(luò)映射或類似的方法與設(shè)備或系統(tǒng)進(jìn)行連接。
14.一種根據(jù)權(quán)利要求1至權(quán)利要求13所述方法的裝置和系統(tǒng),其特征在于:包括處理器用于數(shù)據(jù)的計(jì)算處理,輸入部用于輸入處理,輸出部用于輸出結(jié)果,主存儲(chǔ)部用于存儲(chǔ)對(duì)比方法所需要的程序指令代碼,輔存儲(chǔ)部用于文件隊(duì)列的存儲(chǔ)以及存儲(chǔ)解壓縮時(shí)所產(chǎn)生的臨時(shí)文件,外部存儲(chǔ)部用于存儲(chǔ)打包文件的數(shù)據(jù),差異結(jié)果集合中存儲(chǔ)了內(nèi)容上有差異的文件。
15.一種根據(jù)權(quán)利要求14所述的裝置和系統(tǒng),其特征在于:所述主存儲(chǔ)部包括流水線流程控制以及兩條相互獨(dú)立的流水線流程。
16.一種根據(jù)權(quán)利要求14所述的裝置和系統(tǒng),其特征在于:所述流水線流程控制中包括: 流水線進(jìn)程管理部用于管理協(xié)調(diào)和調(diào)度所述的兩條相互獨(dú)立的流水線流程, 線程管理部用于管理調(diào)度流水線流程, 文件名比較處理部對(duì)應(yīng)文件名比較, 文件校驗(yàn)值比較處理部對(duì)應(yīng)文件校驗(yàn)值比較, 文件內(nèi)容比較處理部對(duì)應(yīng)文件內(nèi)容比較。
17.一種根據(jù)權(quán)利要求14所述的裝置和系統(tǒng),其特征在于:所述輔存儲(chǔ)部用于存儲(chǔ)對(duì)應(yīng)所述兩條相互獨(dú)立流水線流程所需的文件名比較隊(duì)列,文件校驗(yàn)值比較隊(duì)列,文件讀取隊(duì)列,文件解壓隊(duì)列,文件內(nèi)容比較隊(duì)列。
【文檔編號(hào)】G06F9/38GK104199637SQ201410339457
【公開(kāi)日】2014年12月10日 申請(qǐng)日期:2014年7月16日 優(yōu)先權(quán)日:2014年7月16日
【發(fā)明者】劉暢 申請(qǐng)人:珠海金山網(wǎng)絡(luò)游戲科技有限公司, 成都西山居互動(dòng)娛樂(lè)科技有限公司