亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

Rar文件的解壓縮方法和裝置的制作方法

文檔序號:6403017閱讀:383來源:國知局
專利名稱:Rar文件的解壓縮方法和裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)據(jù)解壓縮領(lǐng)域,特別地,涉及一種RAR文件的解壓縮方法和裝置。
背景技術(shù)
近年來,隨著計算機技術(shù)的發(fā)展,數(shù)據(jù)處理量越來越大,為了更有效地存儲、處理和傳輸大量數(shù)據(jù),壓縮技術(shù)應運而生。其中,RAR格式的壓縮文件(簡稱RAR文件)具有較高的壓縮率,并且在數(shù)據(jù)的存儲、管理、通信及保密方面都具有優(yōu)勢。但是,在實際應用中,由于工作環(huán)境的復雜多變,RAR文件中的數(shù)據(jù)中往往存在誤碼,一旦數(shù)據(jù)中存在誤碼,將會嚴重降低RAR文件解壓縮的成功率。因此,如何快速準確的對存在誤碼的RAR文件進行解壓縮,對實際應用具有重要的意義。目前,對于存在誤碼的RAR文件進行解壓縮的方法主要有兩種。一種是忽略RAR文件中的CRC (循環(huán)冗余校驗)部分,直接對RAR文件進行解壓縮;另一種是先遍歷RAR文件,再提取出CRC正確的文件頭塊,然后再對RAR文件進行解壓縮。但是,對于第一種解壓縮方法來說,如果在RAR文件中比較靠前的數(shù)據(jù)塊信息出錯,將會直接導致后面完整且正確的數(shù)據(jù)塊不能被正常解壓。例如,對于非固實壓縮的RAR文件來說,一個文件頭塊的長度信息出錯,直接導致無法正確識別后面的文件頭塊,造成RAR文件不能被正確解壓。對于第二種解壓縮方法來說,如果文件頭塊中的CRC不正確,則完全不能解壓出文件頭塊中的數(shù)據(jù)。但是,也有當文件頭某些字段信息出錯也可以進行解壓的情況,比如文件冗余較少的情況,如較小的文件和PNG這些壓縮后的文件,但其解壓出的文件通常是不完整的?!?br>
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種RAR文件的解壓縮方法和裝置,能夠提高RAR解壓縮的成功率和完整性。本發(fā)明提出一種RAR文件的解壓縮方法,所述RAR文件為非固實壓縮文件,包括固定數(shù)據(jù)塊、非固定數(shù)據(jù)塊和非RAR數(shù)據(jù)塊,所述方法包括如下步驟:
修正所述固定數(shù)據(jù)塊;
在所述RAR文件中獲取第i個數(shù)據(jù)塊;
在所述第i個數(shù)據(jù)塊為非RAR數(shù)據(jù)塊的情況下,將所述第i個數(shù)據(jù)塊修改為非固定數(shù)據(jù)塊;
判斷所述第i個數(shù)據(jù)塊是否為CRC正確的數(shù)據(jù)塊;
如果判斷結(jié)果為否,則獲取所述第i個數(shù)據(jù)塊之后最接近的CRC正確的數(shù)據(jù)塊;
根據(jù)所述第i個數(shù)據(jù)塊與所述第i個數(shù)據(jù)塊之后最接近的CRC正確的數(shù)據(jù)塊之間的間隔修改所述第i個數(shù)據(jù)塊的塊大小,直至獲取到所述RAR文件中最后一個數(shù)據(jù)塊;
對修正后的RAR文件進行解壓縮;其中,i為正整數(shù)且i彡I。其中,所述固定數(shù)據(jù)塊包括標記塊,壓縮文件頭塊和結(jié)尾塊。進一步的,修正所述固定數(shù)據(jù)塊的步驟具體為:
將所述標記塊的值修正為0x52 61 72 21 IA 07 00 ;
將所述壓縮文件頭的頭類型修正為0x73,文件大小修正為OxOD 00 ;
將所述結(jié)束塊的值修正為0xC4 3D 7B 00 40 07 00。進一步的,將所述第i個數(shù)據(jù)塊修改為非固定數(shù)據(jù)塊的方式為:將所述第i個數(shù)據(jù)塊的頭類型修改為文件頭類型。進一步的,所述解壓縮為不包括CRC校驗過程的解壓縮。本發(fā)明還提 出一種與上述RAR文件的解壓縮方法相對應的解壓縮裝置,所述RAR文件為非固實壓縮文件,包括固定數(shù)據(jù)塊、非固定數(shù)據(jù)塊和非RAR數(shù)據(jù)塊,其特征在于,所述裝置包括:
修正單元,用于修正所述固定數(shù)據(jù)塊;
第一獲取單元,用于在所述RAR文件中獲取第i個數(shù)據(jù)塊;
第一修改單元,用于在所述第i個數(shù)據(jù)塊為非RAR數(shù)據(jù)塊的情況下,將第i個數(shù)據(jù)塊修改為非固定數(shù)據(jù)塊;
判斷單元,用于判斷所述第i個數(shù)據(jù)塊是否為CRC正確的數(shù)據(jù)塊;
第二獲取單元,用于當所述判斷單元的判斷結(jié)果為否時,獲取所述第i個數(shù)據(jù)塊之后最接近的CRC正確的數(shù)據(jù)塊;
第二修改單元,用于根據(jù)所述第i個數(shù)據(jù)塊與所述第i個數(shù)據(jù)塊之后最接近的CRC正確的數(shù)據(jù)塊之間的間隔修改所述第i個數(shù)據(jù)塊的塊大小,直至獲取到所述RAR文件中最后一個數(shù)據(jù)塊;
解壓縮單元,用于對修改后的RAR文件進行解壓縮;
其中,i為正整數(shù)且i彡I。其中,所述固定數(shù)據(jù)塊包括標記塊,壓縮文件頭塊和結(jié)尾塊。進一步的,修正所述固定數(shù)據(jù)塊的方式為:
將所述標記塊的值修正為0x52 61 72 21 IA 07 00 ;
將所述壓縮文件頭的頭類型修正為0x73,文件大小修正為OxOD 00 ;
將所述結(jié)束塊的值修正為0xC4 3D 7B 00 40 07 00。進一步的,將所述第i個數(shù)據(jù)塊修改為非固定數(shù)據(jù)塊的方式為:將所述第i個數(shù)據(jù)塊的頭類型修改為文件頭類型。進一步的,所述解壓縮為不包括CRC校驗過程的解壓縮。本發(fā)明RAR文件的解壓縮方法和裝置的優(yōu)選實施例通過對RAR文件中的固定數(shù)據(jù)塊、非固定數(shù)據(jù)塊和非RAR數(shù)據(jù)塊進行修改,再對修改后的RAR文件進行解壓縮,可提高RAR文件解壓縮的成功率和完整性。


圖1是本發(fā)明RAR文件的解壓縮方法一實施例的流程 圖2是本發(fā)明RAR文件的解壓縮裝置一實施例的結(jié)構(gòu)示意圖。
具體實施例方式在對本發(fā)明的技術(shù)方案做進一步詳細說明之前,首先簡單介紹一下RAR壓縮文件。壓縮文件由可變長度的塊組成,這些塊的順序可以變化,但是第一塊必須但是一個在壓縮文件頭后的標記塊?,F(xiàn)在公開的塊類型包括:標記塊,壓縮文件頭塊,文件頭塊,注釋頭,用戶身份信息,子塊和恢復記錄塊等。每個塊均包括下列結(jié)構(gòu):
HEAD_CRC 2字節(jié)所有塊或塊部分的CRC ;
HEAD_TYPE I字節(jié)塊類型;
HEAD_FLAGS 2字節(jié)塊標記;
HEAD_SIZE 2字節(jié)塊大小;
如果塊標記的第一位被置I的話,還存在:
ADD_SIZE 4字節(jié)可選結(jié)構(gòu)-增加塊大小。為使本發(fā)明的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖和具體實施方式
對本發(fā)明作進一步詳細的說明。本發(fā)明提出一種RAR文件 的解壓縮方法,所述RAR文件為非固實壓縮文件,包括固定數(shù)據(jù)塊、非固定數(shù)據(jù)塊和非RAR數(shù)據(jù)塊。參照圖1,示出了本發(fā)明RAR文件的解壓縮方法一實施例的流程圖,該方法包括如下步驟:
S11,當固定數(shù)據(jù)塊不正確時,修正固定數(shù)據(jù)塊。其中,固定數(shù)據(jù)塊包括標記塊,壓縮文件頭塊和結(jié)尾塊。S12,在RAR文件中獲取第i個數(shù)據(jù)塊,其中,i為正整數(shù)且i彡I。S13,在第i個數(shù)據(jù)塊為非RAR數(shù)據(jù)塊的情況下,將第i個數(shù)據(jù)塊修改為非固定數(shù)據(jù)塊,使RAR文件中不存在非RAR數(shù)據(jù)塊,即只包含固定數(shù)據(jù)塊和非固定數(shù)據(jù)塊,由于固定數(shù)據(jù)塊在Sll中已經(jīng)進行了修正,因此,下面的步驟都是針對非固定數(shù)據(jù)塊來進行的。S14,在非固定數(shù)據(jù)塊中,判斷第i個數(shù)據(jù)塊是否為CRC正確的數(shù)據(jù)塊。如果判斷結(jié)果為是,即第i個數(shù)據(jù)塊為CRC正確的數(shù)據(jù)塊,則跳過,不進行任何操作;如果判斷結(jié)果為否,即第i個數(shù)據(jù)塊為CRC不正確的數(shù)據(jù)塊,則轉(zhuǎn)S15。S15,獲取第i個數(shù)據(jù)塊之后最接近的CRC正確的數(shù)據(jù)塊。其中,CRC指的是HEAD_CRC,即所有塊或塊部分的CRC。S16,根據(jù)第i個數(shù)據(jù)塊與第i個數(shù)據(jù)塊之后最接近的CRC正確的數(shù)據(jù)塊之間的間隔修改第i個數(shù)據(jù)塊的塊大小。重復執(zhí)行上述對非RAR數(shù)據(jù)塊和非固定數(shù)據(jù)塊的操作步驟,直至獲取到RAR文件中最后一個數(shù)據(jù)塊,將非固定數(shù)據(jù)塊中的CRC不正確的數(shù)據(jù)塊大小都進行修改。S17,對修改后的RAR文件進行解壓縮,其中,該解壓縮為不包括CRC校驗過程的解壓縮。上述RAR文件的解壓縮方法實施例,通過對RAR文件中的固定數(shù)據(jù)塊、非固定數(shù)據(jù)塊和非RAR數(shù)據(jù)塊進行修改,再對修改后的RAR文件進行解壓縮,可大大提高RAR文件解壓縮的成功率和完整性。
進一步的,在Sll中,固定數(shù)據(jù)塊不正確是指固定數(shù)據(jù)塊中的標記塊的值、壓縮文件頭的類型、壓縮文件頭的文件大小和/或結(jié)束塊的值不正確,對不正確的固定數(shù)據(jù)塊進行修正的步驟,具體為:
將標記塊的值修正為0x52 61 72 21 IA 07 00 ;
將壓縮文件頭的頭類型HEAD_TYPE修正為0x73,文件大小HEAD_SIZE修正為OxOD 00 ; 將結(jié)束塊的值修正為0xC4 3D 7B 00 40 07 00。進一步的,在S13中,將第i個數(shù)據(jù)塊修改為非固定數(shù)據(jù)塊的方式為:將第i個數(shù)據(jù)塊的頭類型修改為文件頭類型,即將非RAR數(shù)據(jù)塊的頭類型HEAD_TYPE修改為0x74。進一步的,在S16中,將第i個數(shù)據(jù)塊的大小修改為第i個數(shù)據(jù)塊與第i個數(shù)據(jù)塊之后最接近的CRC正確的數(shù)據(jù)塊之間的間隔的值。對于前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領(lǐng)域的技術(shù)人員應該知悉,本發(fā)明并不受所描述的動作順序的限制,因為根據(jù)本發(fā)明,某些步驟可以采用其他順去或同時執(zhí)行;其次,本領(lǐng)域技術(shù)人員也應該知悉,上述方法實施例均屬于優(yōu)選實施例,所涉及的動作和模塊并不一定是本發(fā)明所必須的。本發(fā)明還提出一種與上述RAR文件的解壓縮方法相對應的解壓縮裝置,該RAR文件同樣為非固實壓縮文件,包括固定數(shù)據(jù)塊、非固定數(shù)據(jù)塊和非RAR數(shù)據(jù)塊。參看圖2,示出了本發(fā)明RAR文件的解壓縮裝置一實施例的結(jié)構(gòu)示意圖,包括:
修正單元21,用于當固定數(shù)據(jù)塊不正確是,修正固定數(shù)據(jù)塊。其中,固定數(shù)據(jù)塊包括標記塊,壓縮文件頭塊和結(jié)尾塊。第一獲取單元22,用 于在RAR文件中獲取第i個數(shù)據(jù)塊,其中,i為正整數(shù)且i ^ I。第一修改單元23,用于在第i個數(shù)據(jù)塊為非RAR數(shù)據(jù)塊的情況下,將第i個數(shù)據(jù)塊修改為非固定數(shù)據(jù)塊,使RAR文件中不存在非RAR數(shù)據(jù)塊,只包含固定數(shù)據(jù)塊和非固定數(shù)據(jù)塊。判斷單元24,在非固定數(shù)據(jù)塊中,判斷第i個數(shù)據(jù)塊是否為CRC正確的數(shù)據(jù)塊。第二獲取單元25,當判斷單元24的判斷結(jié)果為否時,獲取第i個數(shù)據(jù)塊之后最接近的CRC正確的數(shù)據(jù)塊。其中,CRC指的是HEAD_CRC,即所有塊或塊部分的CRC。第二修改單元26,用于根據(jù)第i個數(shù)據(jù)塊與第i個數(shù)據(jù)塊之后最接近的CRC正確的數(shù)據(jù)塊之間的間隔修改第i個數(shù)據(jù)塊的塊大小,直至將非固定數(shù)據(jù)塊中的CRC不正確的數(shù)據(jù)塊大小都進行修改。解壓縮單元27,用于對修改后的RAR文件進行解壓縮,其中,該解壓縮為不包括CRC校驗過程的解壓縮。上述RAR文件的解壓縮裝置實施例,通過對RAR文件中的固定數(shù)據(jù)塊、非固定數(shù)據(jù)塊和非RAR數(shù)據(jù)塊進行修復,再對修復后的RAR文件進行解壓縮,可大大提高RAR文件解壓縮的成功率和完整性。進一步的,修正單元21修正固定數(shù)據(jù)塊的方式具體為:
將標記塊的值修正為0x52 61 72 21 IA 07 00 ;
將壓縮文件頭的頭類型修正為0x73,文件大小修正為OxOD 00 ;將結(jié)束塊的值修正為0xC4 3D 7B OO 40 07 00。進一步的,第一修改單元23將所述第i個數(shù)據(jù)塊修改為非固定數(shù)據(jù)塊的方式具體為:將第i個數(shù)據(jù)塊的頭類型修改為文件頭類型,即將非RAR數(shù)據(jù)塊的頭類型HEAD_TYPE修改為0x74。進一步的,第二修正單元26將第i個數(shù)據(jù)塊的大小修改為第i個數(shù)據(jù)塊與第i個數(shù)據(jù)塊之后最接近的CRC正確的數(shù)據(jù)塊之間的間隔的值。對于前述的裝置實施例,為了簡單描述,故將其都表述為一系列的單元組合,但是本領(lǐng)域的技術(shù)人員應該知悉,本發(fā)明并不受所描述的單元組合的限制,因為根據(jù)本發(fā)明,某些單元可以采用其他單元執(zhí)行;其次,本領(lǐng)域技術(shù)人員也應該知悉,上述裝置實施例均屬于優(yōu)選實施例,所涉及的單元并不一定是本發(fā)明所必須的。

本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。對于裝置實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。以上對本發(fā)明所提供的一種RAR文件的解壓縮方法和裝置進行了詳細介紹,本文中應用了具體個例對本發(fā)明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實施方式
及應用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應理解為對本發(fā)明的限制。
權(quán)利要求
1.一種RAR文件的解壓縮方法,所述RAR文件為非固實壓縮文件,包括固定數(shù)據(jù)塊、非固定數(shù)據(jù)塊和非RAR數(shù)據(jù)塊,其特征在于,所述方法包括如下步驟: 修正所述固定數(shù)據(jù)塊; 在所述RAR文件中獲取第i個數(shù)據(jù)塊; 在所述第i個數(shù)據(jù)塊為非RAR數(shù)據(jù)塊的情況下,將所述第i個數(shù)據(jù)塊修改為非固定數(shù)據(jù)塊; 判斷所述第i個數(shù)據(jù)塊是否為CRC正確的數(shù)據(jù)塊; 如果判斷結(jié)果為否,則獲取所述第i個數(shù)據(jù)塊之后最接近的CRC正確的數(shù)據(jù)塊; 根據(jù)所述第i個數(shù)據(jù)塊與所述第i個數(shù)據(jù)塊之后最接近的CRC正確的數(shù)據(jù)塊之間的間隔修改所述第i個數(shù)據(jù)塊的塊大小,直至獲取到所述RAR文件中最后一個數(shù)據(jù)塊; 對修改后的RAR文件進行解壓縮; 其中,i為正整數(shù)且i彡I。
2.如權(quán)利要求1所述的方法,其特征在于,所述固定數(shù)據(jù)塊包括標記塊,壓縮文件頭塊和結(jié)尾塊。
3.如權(quán)利要求2所述的方法,其特征在于,修正所述固定數(shù)據(jù)塊的步驟具體為: 將所述標記塊的值修正為0x52 61 72 21 IA 07 00 ; 將所述壓縮文件頭的頭類型修正為0x73,文件大小修正為OxOD 00 ; 將所述結(jié)束塊的值修正為0xC4 3D 7B 00 40 07 00。
4.如權(quán)利要求1所述的方法,其特征在于,將所述第i個數(shù)據(jù)塊修改為非固定數(shù)據(jù)塊的方式為:將所述第i個數(shù)據(jù)塊的頭類型修改為文件頭類型。
5.如權(quán)利要求1所述的方法,其特征在于,所述解壓縮為不包括CRC校驗過程的解壓縮。
6.一種RAR文件的解壓縮裝置,所述RAR文件為非固實壓縮文件,包括固定數(shù)據(jù)塊、非固定數(shù)據(jù)塊和非RAR數(shù)據(jù)塊,其特征在于,所述裝置包括: 修正單元,用于修正所述固定數(shù)據(jù)塊; 第一獲取單元,用于在所述RAR文件中獲取第i個數(shù)據(jù)塊; 第一修改單元,用于在所述第i個數(shù)據(jù)塊為非RAR數(shù)據(jù)塊的情況下,將第i個數(shù)據(jù)塊修改為非固定數(shù)據(jù)塊; 判斷單元,用于判斷所述第i個數(shù)據(jù)塊是否為CRC正確的數(shù)據(jù)塊; 第二獲取單元,用于當所述判斷單元的判斷結(jié)果為否時,獲取所述第i個數(shù)據(jù)塊之后最接近的CRC正確的數(shù)據(jù)塊; 第二修改單元,用于根據(jù)所述第i個數(shù)據(jù)塊與所述第i個數(shù)據(jù)塊之后最接近的CRC正確的數(shù)據(jù)塊之間的間隔修改所述第i個數(shù)據(jù)塊的塊大小,直至獲取到所述RAR文件中最后一個數(shù)據(jù)塊; 解壓縮單元,用于對修改后的RAR文件進行解壓縮; 其中,i為正整數(shù)且i彡I。
7.如權(quán)利要求6所述的裝置,其特征 在于,所述固定數(shù)據(jù)塊包括標記塊,壓縮文件頭塊和結(jié)尾塊。
8.如權(quán)利要求7所述的裝置,其特征在于,修正所述固定數(shù)據(jù)塊的方式為:將所述標記塊的值修正為0x52 61 72 21 IA 07 00 ; 將所述壓縮文件頭的頭類型修正為0x73,文件大小修正為OxOD 00 ; 將所述結(jié)束塊的值修正為0xC4 3D 7B 00 40 07 00。
9.如權(quán)利要求6所述的裝置,其特征在于,將所述第i個數(shù)據(jù)塊修改為非固定數(shù)據(jù)塊的方式為:將所述第i個數(shù)據(jù)塊的頭類型修改為文件頭類型。
10.如權(quán)利要求6 所述的裝置,其特征在于,所述解壓縮為不包括CRC校驗過程的解壓縮。
全文摘要
本發(fā)明提供了RAR文件的解壓縮方法和裝置,該RAR文件為非固實壓縮文件,包括固定數(shù)據(jù)塊、非固定數(shù)據(jù)塊和非RAR數(shù)據(jù)塊。其中方法為修正固定數(shù)據(jù)塊;在RAR文件中獲取第i個數(shù)據(jù)塊;在第i個數(shù)據(jù)塊為非RAR數(shù)據(jù)塊的情況下,將非RAR數(shù)據(jù)塊修改為非固定數(shù)據(jù)塊;判斷第i個數(shù)據(jù)塊是否為CRC正確的數(shù)據(jù)塊;若否,則獲取第i個數(shù)據(jù)塊之后最接近的CRC正確的數(shù)據(jù)塊;根據(jù)第i個數(shù)據(jù)塊與最接近的CRC正確的數(shù)據(jù)塊之間的間隔修改第i個數(shù)據(jù)塊的塊大小,直至獲取到RAR文件中最后一個數(shù)據(jù)塊;對修改后的RAR文件進行解壓縮;i為正整數(shù)且i≥1。本發(fā)明的RAR文件的解壓縮方法和裝置,通過對RAR文件進行修改,再對修改后的RAR文件進行解壓縮,以提高RAR文件解壓縮的成功率和完整性。
文檔編號G06F17/30GK103235829SQ201310175419
公開日2013年8月7日 申請日期2013年5月14日 優(yōu)先權(quán)日2013年5月14日
發(fā)明者王大彬, 李民權(quán) 申請人:廈門市美亞柏科信息股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1