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

一種文件壓縮方法、文件解壓縮方法、裝置及服務器與流程

文檔序號:11773020閱讀:242來源:國知局
一種文件壓縮方法、文件解壓縮方法、裝置及服務器與流程
本發(fā)明涉及信息技術領域,特別涉及一種文件壓縮方法、文件解壓縮方法、裝置及服務器。

背景技術:
目前,現(xiàn)有的GZIP(GNUZip)壓縮方法中,先將文件拆分成多個數(shù)據(jù)塊,然后對拆分后的多個數(shù)據(jù)塊進行并行壓縮,之后,在以bit為單位將壓縮的每個數(shù)據(jù)塊合并為一個壓縮文件。由該GZIP壓縮方法可知,整個GZIP壓縮文件只有壓縮數(shù)據(jù)塊的起始地址,并沒有壓縮數(shù)據(jù)的數(shù)據(jù)塊數(shù)和每個數(shù)據(jù)塊的長度。所以,在對應的GZIP解壓縮方法中,即對所述壓縮文件進行解壓縮時,只能順序的一個個bit進行讀取和解析,也就是說,只有對所述壓縮文件中的第一個壓縮數(shù)據(jù)塊解壓縮完成后,才能對第二個壓縮數(shù)據(jù)塊進行解壓,即,只能對一個一個數(shù)據(jù)塊進行串行解壓?,F(xiàn)有的GZIP解壓縮方式中,只能對壓縮文件進行串行解壓縮,解壓縮的速度和效率不高。

技術實現(xiàn)要素:
本發(fā)明實施例中提供了一種文件壓縮方法、文件解壓縮的方法、裝置及服務器,數(shù)據(jù)的并行解壓提高解壓縮的速度和效率。為了解決上述技術問題,本發(fā)明實施例公開了如下技術方案:第一方面提供了一種文件壓縮方法,包括:將文件拆分成多個數(shù)據(jù)塊,并統(tǒng)計所述數(shù)據(jù)塊的個數(shù);根據(jù)所述多個數(shù)據(jù)塊的個數(shù)計算需要擴展數(shù)據(jù)內(nèi)容的長度,并根據(jù)所述長度申請額外可選項占用的內(nèi)存;對所述多個數(shù)據(jù)塊進行并行壓縮,得到對應的多個壓縮數(shù)據(jù)塊,并獲取各個數(shù)據(jù)塊的循環(huán)冗余校驗CRC值;將所述擴展數(shù)據(jù)內(nèi)容的長度、數(shù)據(jù)塊的個數(shù)、各個壓縮數(shù)據(jù)塊的長度和各個數(shù)據(jù)塊 的CRC值存儲在所述額外可選項中;將所述額外可選項添加到數(shù)據(jù)壓縮格式中頭部對應的擴展extra選項中,合并所述多個壓縮數(shù)據(jù)塊,以獲得壓縮文件;將所述壓縮文件發(fā)送給接收端,以便于接收端對所述壓縮文件進行并行解壓。在第一方面的第一種可能的實現(xiàn)方式中,所述對所述多個數(shù)據(jù)塊進行并行壓縮,具體包括:通過多個壓縮引擎分別對所述多個數(shù)據(jù)塊進行并行壓縮。結合第一方面或第一方面第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,所述額外可選項還包括:SI1和SI2,其中,所述SI1和SI2表示額外可選項中擴展數(shù)據(jù)的ID。第二方面提供了一種文件解壓縮方法,包括:獲取壓縮文件中各個壓縮數(shù)據(jù)塊的長度、數(shù)據(jù)塊的個數(shù)以及各個數(shù)據(jù)塊的循環(huán)冗余校驗CRC值;根據(jù)所述壓縮數(shù)據(jù)塊的長度和數(shù)據(jù)塊的個數(shù)對所述壓縮文件進行分塊,得到各個壓縮數(shù)據(jù)塊;對所述各個壓縮數(shù)據(jù)塊進行并行解壓縮,得到對應的各個數(shù)據(jù)塊;計算解壓縮得到的所述各個數(shù)據(jù)塊的CRC值;判斷獲取的所述各個數(shù)據(jù)塊的CRC值與解壓縮得到的各個數(shù)據(jù)塊的CRC值是否相同;在所述各個數(shù)據(jù)塊的CRC值與解壓縮得到的各個數(shù)據(jù)塊的CRC值相同時,合并解壓縮得到的所述各個數(shù)據(jù)塊,得到原文件。在第二方面的第一種可能的實現(xiàn)方式中,所述獲取壓縮文件中各個壓縮數(shù)據(jù)塊的長度、數(shù)據(jù)塊的個數(shù)以及各個數(shù)據(jù)塊的循環(huán)冗余校驗CRC值具體包括:從壓縮文件頭部擴展extra選項中的額外可選項中獲取各個壓縮數(shù)據(jù)塊的長度、數(shù)據(jù)塊的個數(shù)以及各個數(shù)據(jù)塊的循環(huán)冗余校驗CRC值。結合第二方面或第二方面第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,所述對所述各個壓縮數(shù)據(jù)塊進行并行解壓縮,具體包括:通過多個解壓縮引擎分別對所述多個壓縮數(shù)據(jù)塊進行并行解壓縮。第三方面提供了一種文件壓縮裝置,包括:拆分單元,用于將文件拆分成多個數(shù)據(jù)塊,并統(tǒng)計所述多個數(shù)據(jù)塊的個數(shù);第一計算單元,用于根據(jù)所述多個數(shù)據(jù)塊的個數(shù)計算擴展數(shù)據(jù)內(nèi)容的長度,根據(jù)所述長度申請額外可選項占用的內(nèi)存;壓縮單元,用于對所述多個數(shù)據(jù)塊進行并行壓縮,得到多個壓縮數(shù)據(jù)塊;第二計算單元,用于在壓縮單元對所述多個數(shù)據(jù)塊進行并行壓縮時,分別計算各個數(shù)據(jù)塊的循環(huán)冗余校驗CRC值;存儲單元,用于所述擴展數(shù)據(jù)內(nèi)容的長度、數(shù)據(jù)塊的個數(shù)、各個壓縮數(shù)據(jù)塊的長度和各個數(shù)據(jù)塊的CRC值存儲在額外可選項中;添加單元,用于將所述額外可選項添加到壓縮格式中頭部對應的擴展extra選項中;合并單元,用于在所述添加單元將所述額外可選項添加到GZIP格式中頭部對應的位置后,合并所述多個壓縮數(shù)據(jù)塊,得到壓縮文件;發(fā)送單元,用于將所述壓縮文件發(fā)送給接收端,以便于接收端對所述壓縮文件進行并行解壓。第四方面提供了一種文件解壓縮裝置,包括:獲取單元,用于從壓縮文件頭部的額外可選項中獲取各個壓縮數(shù)據(jù)塊的長度、數(shù)據(jù)塊的個數(shù)以及各個數(shù)據(jù)塊的循環(huán)冗余校驗CRC值;劃分單元,用于根據(jù)所述壓縮數(shù)據(jù)塊的長度和數(shù)據(jù)塊的個數(shù)對所述壓縮文件進行分塊,得到各個壓縮數(shù)據(jù)塊;解壓縮單元,用于對所述各個壓縮數(shù)據(jù)塊進行并行解壓縮,得到對應的各個數(shù)據(jù)塊;計算單元,用于在解壓縮單元對所述各個壓縮數(shù)據(jù)塊進行并行解壓縮時,計算解壓縮得到的所述各個數(shù)據(jù)塊的CRC值;判斷單元,用于判斷所述獲取單元獲取的所述各個數(shù)據(jù)塊的CRC值與計算解壓縮得到的各個數(shù)據(jù)塊的CRC值是否相同;確定單元,用于在判斷單元判斷CRC值相同時,確定所述數(shù)據(jù)塊與原數(shù)據(jù)塊一致;合并單元,用于在所述確定單元合確定所述數(shù)據(jù)塊與原數(shù)據(jù)塊一致時,合并解壓縮得到的所述各個數(shù)據(jù)塊,得到原文件。在第四方面的第一種可能的實現(xiàn)方式中,所述獲取單元,具體用于從壓縮文件頭部擴展extra選項中的額外可選項中獲取各個壓縮數(shù)據(jù)塊的長度、數(shù)據(jù)塊的個數(shù)以及各個數(shù)據(jù)塊的循環(huán)冗余校驗CRC值。第五方面提供了一種服務器,包括:處理器,用于將待壓縮的文件拆分成多個數(shù)據(jù)塊,并統(tǒng)計所述多個數(shù)據(jù)塊的個數(shù);根據(jù)所述多個數(shù)據(jù)塊的個數(shù)計算擴展數(shù)據(jù)內(nèi)容的長度,以及根據(jù)所述長度申請額外可選項占用的內(nèi)存;壓縮引擎組,包括多個壓縮引擎,用于對所述多個數(shù)據(jù)塊進行并行壓縮,得到多個壓縮數(shù)據(jù)塊;所述處理器,還用于計算各個數(shù)據(jù)塊的循環(huán)冗余校驗CRC值,并將所述擴展數(shù)據(jù)內(nèi)容的長度、數(shù)據(jù)塊的個數(shù)、各個壓縮數(shù)據(jù)塊的長度和各個數(shù)據(jù)塊的CRC值存儲在額外可選項中;以及將所述額外可選項添加到GZIP格式中頭部對應的擴展extra選項中,合并所述多個壓縮數(shù)據(jù)塊,得到壓縮文件,并將所述壓縮文件發(fā)送給接收端,以便于接收端對所述壓縮文件進行并行解壓。第六方面提供了一種服務器,包括:處理器,用于從壓縮文件頭部的額外可選項中獲取各個壓縮數(shù)據(jù)塊的長度、數(shù)據(jù)塊的個數(shù)以及各個數(shù)據(jù)塊的循環(huán)冗余校驗CRC值;根據(jù)所述壓縮數(shù)據(jù)塊的長度和數(shù)據(jù)塊的個數(shù)對所述壓縮文件進行分塊,得到各個壓縮數(shù)據(jù)塊;解壓縮引擎組,用于對所述各個壓縮數(shù)據(jù)塊進行并行解壓縮,得到對應的各個數(shù)據(jù)塊;所述處理器,還用于計算解壓縮得到的所述各個數(shù)據(jù)塊的循環(huán)冗余校驗CRC值;如果判斷獲取的所述各個數(shù)據(jù)塊的CRC值與解壓縮得到的各個數(shù)據(jù)塊的CRC值相同,則所述數(shù)據(jù)塊與原數(shù)據(jù)塊一致;合并解壓縮得到的所述各個數(shù)據(jù)塊,得到原文件。由上述技術方案可知,本發(fā)明實施例中,在對文件進行壓縮時,將各個壓縮數(shù)據(jù)塊的長度和各個數(shù)據(jù)塊的循環(huán)冗余校驗(CRC,CyclicRedundancyCheck)值添加在頭部 信息的額外可選項中,以便于接收端在對該壓縮文件解壓時,可以根據(jù)所述各個壓縮數(shù)據(jù)塊的長度和各個數(shù)據(jù)塊的CRC值對該壓縮文件進行并行解壓縮,從而提高了解壓縮的速度與效率。附圖說明為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明實施例提供的一種文件壓縮方法的流程圖;圖2為本發(fā)明實施例提供的一種文件解壓縮方法的流程圖;圖3為本發(fā)明實施例提供的一種文件壓縮裝置的結構示意圖;圖4為本發(fā)明實施例提供的一種文件解壓縮裝置的結構示意圖;圖5為本發(fā)明實施例提供的一種服務器的結構示意圖;圖6為本發(fā)明實施例提供的另一種服務器的結構示意圖;圖7為本發(fā)明實施例提供的一種文件壓縮方法的應用實例的流程圖;圖8為本發(fā)明實施例提供的一種文件解壓縮方法的應用實例的流程圖。具體實施方式描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。請參閱圖1,圖1為本發(fā)明實施例提供的一種文件壓縮方法的流程圖;所述方法包括:步驟101:將文件拆分成多個數(shù)據(jù)塊,并統(tǒng)計所述多個數(shù)據(jù)塊的個數(shù);其中,服務器(X86服務器、簡約指令集計算機、IA-64服務器等)對文件(比如UNIX系統(tǒng)的文件、本地存儲的文件或者接收到的文件,或者是操作系統(tǒng)上運行的各種格式的文件,特別是文本文件等等)拆分方式有多種,針對不同格式的數(shù)據(jù)塊,可以采用的不同的拆分方法,比如,可以采用TMPGEnc來拆分MPEG格式的文件;還可以采用ASFTools拆分ASF或 WMV格式的文件,還可以采用AVIchop拆分MPEG4格式的文件等等。其中,拆分的方式可以按照固定字節(jié)數(shù)拆分,也可以按照文件的大小均分,還可以根據(jù)需要任意拆分,本實施例不作限制。本實施例中的文件,是指適用于GZIP壓縮或解壓縮的文件。步驟102:根據(jù)所述多個數(shù)據(jù)塊的個數(shù)計算擴展數(shù)據(jù)內(nèi)容的長度,并根據(jù)所述長度申請額外可選項占用的內(nèi)存;比如,如果將文件拆分成10個數(shù)據(jù)塊,則擴展數(shù)據(jù)內(nèi)容的長度(XLEN,eXtraLENgth)就是:每個數(shù)據(jù)塊的長度之和,即10個數(shù)據(jù)塊的長度之和。本實施例將所有數(shù)據(jù)塊占用的長度定義為擴展數(shù)據(jù)內(nèi)容的長度。也就是說,所述XLEN是可選項字節(jié)數(shù)。即下述表1的NUM~nCRC的字節(jié)數(shù)。比如,如果將文件拆分成10個數(shù)據(jù)塊的情況下,參考下述表2中每個表示項的字節(jié)數(shù),即XLEN=2(NUM)+(4+4)*10=82。然后,由于計算出XLEN的長度為82,可以通過malloc函數(shù)來申請82bite的內(nèi)存。本實施例中,所述額外可選項位于壓縮文件的頭部的擴展選項中,其額外可選項的結構具體詳見下述表1所示。步驟103:對所述多個數(shù)據(jù)塊進行并行壓縮,得到多個壓縮數(shù)據(jù)塊,并計算各個數(shù)據(jù)塊的循環(huán)冗余校驗CRC值;在該實施例中,并行壓縮需要通過多個壓縮引擎分別對所述多個數(shù)據(jù)塊進行壓縮,本實施例中,在硬件壓縮的場合下,并行壓縮是利用多個壓縮引擎同時對多個數(shù)據(jù)塊進行壓縮;在軟件壓縮的場合下,并行壓縮是在中央處理器(CPU,CentralProcessingUnit)有多個物理核的情況下,利用多線程技術,同時對多個數(shù)據(jù)塊進行壓縮。通常情況下,為了校驗各個數(shù)據(jù)解壓后是否正確,需要計算各個數(shù)據(jù)塊的CRC校驗值,以便于通過CRC算法進行校驗,其中CRC的原理是:而計算各個數(shù)據(jù)塊的CRC校驗值,其中一種CRC算法的原理為,但并不限于此:下面,借助于多項式除法,其余數(shù)為校驗字段。例如:數(shù)據(jù)段代碼為:1011001;對應m(x)=x6+x4+x3+1假設生成多項式為:g(x)=x4+x3+1;則對應g(x)的代碼為:11001x4m(x)=x10+x8+x7+x4對應的代碼記為:10110010000;采用多項式除法:得余數(shù)為:1010(即校驗字段為:1010)。當然,對于本領域技術人員,還可以采用其他的CRC算法,本實例不作限制。步驟104:將所述擴展數(shù)據(jù)內(nèi)容的長度、數(shù)據(jù)塊的個數(shù)、各個壓縮數(shù)據(jù)塊的長度和各個數(shù)據(jù)塊的CRC值存儲在額外可選項中;比如,在上述過程中,先將文件拆分成N個數(shù)據(jù)塊,統(tǒng)計數(shù)據(jù)塊的個數(shù),以及根據(jù)數(shù)據(jù)塊的個數(shù)得到擴展數(shù)據(jù)內(nèi)容的長度;然后,再對各個數(shù)據(jù)塊進行壓縮后,獲知每個壓縮數(shù)據(jù)塊的長度,并計算得到各個數(shù)據(jù)塊的CRC值,然后,將所述擴展數(shù)據(jù)內(nèi)容的長度、數(shù)據(jù)塊的個數(shù)、第一個壓縮數(shù)據(jù)塊的長度和第一數(shù)據(jù)塊的CRC值,第二個壓縮數(shù)據(jù)塊的長度和第二數(shù)據(jù)塊的CRC值,一直到第N個壓縮數(shù)據(jù)塊的長度和第N數(shù)據(jù)塊的CRC值依次分別添加到額外可選項中對應的XLEN字段、NUM字段、1LEN字段、1CRC字段;2LEN字段、2CRC字段;以及NLEN字段、NCRC字段中;進一步,所述額外可選項還可以包括標識信息,比如SI1和SI2,其中,所述SI1和SI2為額外可選項中擴展數(shù)據(jù)內(nèi)容的ID。具體的,所述額外可選項的結構具體如表1所示:表1SI1SI2XLENNUM1LEN1CRC····nLENnCRC其中,所述SI1和SI2為標識信息;所述XLEN為擴展內(nèi)容的長度,即從NUM到nCRC的長度;所述NUM,表示該壓縮文件擁有的數(shù)據(jù)塊數(shù);所述1LEN,1CRC至NLEN,NCRC,用于表示擴展信息,包括各個壓縮數(shù)據(jù)塊的長度信息,具體包括:壓縮后的各個壓縮數(shù)據(jù)塊(block)的長度和壓縮前的各個數(shù)據(jù)塊的CRC32值,所述CRC32是一種數(shù)據(jù)差錯校驗碼,在數(shù)據(jù)通信中以及壓縮等情況下,通過比較原始數(shù)據(jù)和壓縮包解壓數(shù)據(jù)的CRC32值是否相同來校驗數(shù)據(jù)是否出錯。其中,額外可選項的結構中包括 具體內(nèi)容如表2所示:表2其中,表2所示內(nèi)容只是舉例說明,并不限于此,還可以根據(jù)需要進行適應性修改。步驟105:將所述額外可選項添加到壓縮格式中頭部對應的擴展extra選項中,合并所述多個壓縮數(shù)據(jù)塊,以得到壓縮文件;進一步,所述擴展extra選項除了包括所述額外可選項外,還可以包括源文件名、注釋文字或CRC16等。本實施例主要是對額外可選項進行擴展。即在額外可選項中增加所述擴展數(shù)據(jù)內(nèi)容的長度、數(shù)據(jù)塊的個數(shù)、各個壓縮數(shù)據(jù)塊的長度和各個數(shù)據(jù)塊的CRC值,以便于接收端根據(jù)所述增加的信息對各個數(shù)據(jù)塊進行并行解壓。本實施例對文件的壓縮適用于GZIP壓縮格式。每個獨立的GZIP壓縮文件都包括頭部、數(shù)據(jù)部和尾部,其中,頭部可以包括擴展extra選項,之外還可以包括:ID1ID2、CM、FLG、MTIME、XFL、OS,其中,所述ID1ID2為固定值,即ID1=0X1F,ID2=0X8B;用于標識GZIP格式;所述CM:表示壓縮方法,目前只有一個值,即CM=8,表示DEFLATE方法;所述MTIME:表示壓縮時間,采用UNIX格式;所述XFL:表示壓縮模式,XFL=2:表示最大壓縮但最慢算法;XFL=4,表示最快但最小壓縮算法;所述OS:表示文件系統(tǒng),例如:OS=0表示FAT文件系統(tǒng);OS=3表示UNIX文件系統(tǒng);所述FLG:表示擴展功能標識,每個BIT表示一種附加數(shù)據(jù),具體的對應內(nèi)容會在extra里面表示,所述extra包括:額外可選項,原文件名,注釋文字和CRC16等。上述描述了GZIP壓縮文件的頭部的內(nèi)容信息,之外,GZIP壓縮文件還可以包括數(shù)據(jù)部和尾部,也就是說,目前,每個獨立的GZIP壓縮文件都是由頭部,數(shù)據(jù)部和尾部組成。其中,所述頭部的信息詳見上述,在此不再贅述。所述數(shù)據(jù)部包括一個或者多個數(shù)據(jù)塊(本實施例即一個或多個壓縮數(shù)據(jù)塊,下同),每個數(shù)據(jù)塊的格式包括BFINAL、BTYPE和數(shù)據(jù)DATA信息。BFINAL位占用1bit,表示是否為最后一個數(shù)據(jù)塊,如果為BFINAL位為1時表示最后一個數(shù)據(jù)塊。BYTPE表示數(shù)據(jù)的壓縮方式,壓縮類型(2bit),可能是靜態(tài)Huffman壓縮(01)、動態(tài)Huffman壓縮(10)也可能是表示不壓縮(00);DATA表示壓縮數(shù)據(jù),(比如,LZ77+huffman編碼+二叉樹特性等)。所述尾部,包括原文件的32位CRC值和以及原始數(shù)據(jù)長度的低32位值,尾部主要用來驗證解壓后的文件和壓縮前的原文件是否一致。步驟106:將所述壓縮文件發(fā)送給接收端,以便于接收端對所述壓縮文件進行并行解壓。需要說明的是,在該實施例中,針對本實施例的壓縮方式,可以采用現(xiàn)有的串行解壓,也可以采用本發(fā)明實施例提供的并行解壓(具體如下述圖2實施例所示),如果采用串行解壓縮,就需要利用該壓縮文件尾部的內(nèi)容來校驗解壓后的文件和壓縮前的原文件是否一致;而如果采用本申請的并行解壓縮,不需要利用尾部的內(nèi)容用來驗證解壓后的文件和壓縮前的原文件是否一致,而是需要根據(jù)頭部中擴展extra選項中的額外可選項的各個CRC值來校驗解壓后的各個數(shù)據(jù)塊和壓縮前的原各個數(shù)據(jù)塊是否一致。本發(fā)明實施例中,在對文件進行壓縮時,將各個壓縮數(shù)據(jù)塊的長度和各個數(shù)據(jù)塊的CRC值通過新增字段添加在頭部信息的額外可選項中,以便于在接收端解壓時,可以根據(jù)這些信息對該壓縮文件進行并行解壓縮,從而提高了解壓縮的速度與效率。還請參閱圖2,圖2為本發(fā)明實施例提供的一種文件解壓縮方法的流程圖,所述方法包括:步驟201:獲取壓縮文件中各個壓縮數(shù)據(jù)塊的長度、數(shù)據(jù)塊的個數(shù)以及各個數(shù)據(jù)塊的循環(huán)冗余校驗CRC值;其獲取的過程為:服務器從壓縮文件頭部擴展extra選項中的額外可選項中獲取各個壓縮數(shù)據(jù)塊的長度、數(shù)據(jù)塊的個數(shù)以及各個數(shù)據(jù)塊的循環(huán)冗余校驗CRC值。步驟202:根據(jù)所述壓縮數(shù)據(jù)塊的長度和數(shù)據(jù)塊的個數(shù)對所述壓縮文件進行分塊,得到各個壓縮數(shù)據(jù)塊;步驟203:對所述各個壓縮數(shù)據(jù)塊進行并行解壓縮,得到對應的各個數(shù)據(jù)塊;具體可以服務器將各個壓縮數(shù)據(jù)塊輸入到對應解壓縮引擎中,通過多個解壓縮引擎分別對所述多個壓縮數(shù)據(jù)塊進行并行解壓縮。其中并行解壓縮的過程對于本領域技術人員來說,已是熟知技術,在此不再贅述。步驟204:計算解壓縮得到的所述各個數(shù)據(jù)塊的CRC值;其計算過程對于本領域技術人員已是熟知技術,在此不再贅述。步驟205:如果獲取的所述各個數(shù)據(jù)塊的CRC值與解壓縮得到的各個數(shù)據(jù)塊的CRC值相同,則所述各個數(shù)據(jù)塊與原各個數(shù)據(jù)塊一致;步驟206:合并解壓縮得到的所述各個數(shù)據(jù)塊,得到原文件。本發(fā)明實施例中,在解壓縮時,服務器先從壓縮文件中獲取各個壓縮數(shù)據(jù)塊的長度和各個數(shù)據(jù)塊的CRC值,根據(jù)這些信息對該壓縮文件進行并行解壓縮,并對解壓縮后的數(shù)據(jù)塊可以分別通過獨立的CRC值進行正確性檢查,從而提高了解壓縮的速度與效率?;谏鲜龇椒ǖ膶崿F(xiàn)過程,本發(fā)明實施例還提供一種文件壓縮裝置,其結構示意圖如圖3所示,所述裝置包括:拆分單元31,第一計算單元32,壓縮單元33,第二計算單元34,存儲單元35,添加單元36和合并單元37,其中,所述拆分單元31,用于將文件拆分成多個數(shù)據(jù)塊,并統(tǒng)計所述多個數(shù)據(jù)塊的個數(shù);其中,可以按照固定字節(jié)數(shù)拆分,可以均分,還可以根據(jù)需要任意拆分。所述第一計算單元32,用于根據(jù)所述多個數(shù)據(jù)塊的個數(shù)計算擴展數(shù)據(jù)內(nèi)容的長度,根據(jù)所述長度申請額外可選項占用的內(nèi)存;所述壓縮單元33,用于對所述多個數(shù)據(jù)塊進行并行壓縮,得到多個壓縮數(shù)據(jù)塊,具體可以通過多個壓縮引擎分別對所述多個數(shù)據(jù)塊進行并行壓縮;所述第二計算單元34,用于在壓縮單元33對所述多個數(shù)據(jù)塊進行并行壓縮時,分別計算各個數(shù)據(jù)塊的循環(huán)冗余校驗CRC值;所述存儲單元35,用于所述擴展數(shù)據(jù)內(nèi)容的長度、數(shù)據(jù)塊的個數(shù)、各個壓縮數(shù)據(jù)塊的長度和各個數(shù)據(jù)塊的CRC值存儲在額外可選項中;所述添加單元36,用于將所述額外可選項添加到壓縮格式中頭部對應的擴展extra選項中;所述合并單元37,用于在所述添加單元將所述額外可選項添加到GZIP格式中頭部對應的位置后,合并所述多個壓縮數(shù)據(jù)塊,得到壓縮文件。所述裝置中各個單元的功能和作用的實現(xiàn)過程,詳見上述方法中對應的實現(xiàn)過程,在此不再贅述。相應的,本發(fā)明實施例還提供一種文件解壓縮裝置,其結構示意圖如圖4所示,所述裝置包括:獲取單元41,劃分單元42,解壓縮單元43,計算單元44,判斷單元45,確定單元46、合并單元47和發(fā)送單元48,其中,所述獲取單元41,用于從壓縮文件頭部的額外可選項中獲取各個壓縮數(shù)據(jù)塊的長度、數(shù)據(jù)塊的個數(shù)以及各個數(shù)據(jù)塊的循環(huán)冗余校驗CRC值,具體用于從壓縮文件頭部擴展extra選項中的額外可選項中獲取各個壓縮數(shù)據(jù)塊的長度、數(shù)據(jù)塊的個數(shù)以及各個數(shù)據(jù)塊的循環(huán)冗余校驗CRC值;所述劃分單元42,用于根據(jù)所述壓縮數(shù)據(jù)塊的長度和數(shù)據(jù)塊的個數(shù)對所述壓縮文件進行分塊,得到各個壓縮數(shù)據(jù)塊;所述解壓縮單元43,用于對所述各個壓縮數(shù)據(jù)塊進行并行解壓縮,得到對應的各個數(shù)據(jù)塊;所述計算單元44,用于在解壓縮單元對所述各個壓縮數(shù)據(jù)塊進行并行解壓縮時,計算解壓縮得到的所述各個數(shù)據(jù)塊的CRC值;所述判斷單元45,用于判斷所述獲取單元獲取的所述各個數(shù)據(jù)塊的CRC值與計算解壓縮得到的各個數(shù)據(jù)塊的CRC值是否相同;所述確定單元46,用于在判斷單元判斷CRC值相同時,確定所述數(shù)據(jù)塊與原數(shù)據(jù)塊一致;所述合并單元47,用于在所述確定單元合確定所述數(shù)據(jù)塊與原數(shù)據(jù)塊一致時,合并解壓縮得到的所述各個數(shù)據(jù)塊,得到原文件;所述發(fā)送單元48,用于將所述壓縮文件發(fā)送給接收端,以便于接收端對所述壓縮文件進行并行解壓。所述裝置中各個單元的功能和作用的實現(xiàn)過程,詳見上述方法中對應的實現(xiàn)過程,在此不再贅述。相應的,本發(fā)明實施例還提供一種服務器,其結構示意圖如圖5所示,所述服務器包括:處理器51和壓縮引擎組52,其中,所述處理器51,用于將待壓縮的文件拆分成多個數(shù)據(jù)塊,并統(tǒng)計所述多個數(shù)據(jù)塊的個數(shù);根據(jù)所述多個數(shù)據(jù)塊的個數(shù)計算擴展數(shù)據(jù)內(nèi)容的長度,以及根據(jù)所述長度申請額外可選項占用的內(nèi)存;所述壓縮引擎組52,包括對個壓縮引擎,用于對所述多個數(shù)據(jù)塊進行并行壓縮,得到多個壓縮數(shù)據(jù)塊;所述處理器51,還用于計算各個數(shù)據(jù)塊的循環(huán)冗余校驗CRC值,并將所述擴展數(shù)據(jù)內(nèi)容的長度、數(shù)據(jù)塊的個數(shù)、各個壓縮數(shù)據(jù)塊的長度和各個數(shù)據(jù)塊的CRC值存儲在額外可選項中;以及將所述額外可選項添加到GZIP格式中頭部對應的擴展extra選項中,合并所述多個壓縮數(shù)據(jù)塊,得到壓縮文件,并將所述壓縮文件發(fā)送給接收端,以便于接收端對所述壓縮文件進行并行解壓。所述服務器的功能和作用的實現(xiàn)過程,詳見上述方法中對應的實現(xiàn)過程,在此不再贅述。相應的,本發(fā)明實施例還提供另一種服務器,其結構示意圖如圖6所示,所述服務器包括:處理器61和解壓縮引擎組62,其中,所述處理器61,用于從壓縮文件頭部的額外可選項中獲取各個壓縮數(shù)據(jù)塊的長度、數(shù)據(jù)塊的個數(shù)以及各個數(shù)據(jù)塊的循環(huán)冗余校驗CRC值;根據(jù)所述壓縮數(shù)據(jù)塊的長度和數(shù)據(jù)塊的個數(shù)對所述壓縮文件進行分塊,得到各個壓縮數(shù)據(jù)塊;所述解壓縮引擎組62,用于對所述各個壓縮數(shù)據(jù)塊進行并行解壓縮,得到對應的各個數(shù)據(jù)塊; 所述處理器61,還用于計算解壓縮得到的所述各個數(shù)據(jù)塊的循環(huán)冗余校驗CRC值;如果判斷獲取的所述各個數(shù)據(jù)塊的CRC值與解壓縮得到的各個數(shù)據(jù)塊的CRC值相同,則所述數(shù)據(jù)塊與原數(shù)據(jù)塊一致;合并解壓縮得到的所述各個數(shù)據(jù)塊,得到原文件。本發(fā)明實施例中,為了使包含多壓縮數(shù)據(jù)塊(block)的壓縮文件在解壓的時候能夠并行解壓,從而發(fā)揮多核或者多通道技術的優(yōu)勢。在遵循現(xiàn)有GZIP格式的基礎上,本發(fā)明實施例中,在壓縮的時把各block塊的長度信息和各block塊原數(shù)據(jù)塊的CRC32值存放在頭部擴展選項的額外可選項中,以便于在解壓時,根據(jù)所述各block塊的長度信息和各block塊原數(shù)據(jù)塊的CRC32值進行并行解壓,從而提高了解壓縮的速度與效率。為了便于本領域技術人員的理解,下面以具體的應用實例來說明。還請參閱圖7,為本發(fā)明實施例提供的一種文件壓縮方法的應用實例的流程圖;如圖所示,該壓縮方式主要是利用硬件或者軟件的多個壓縮引擎對個block塊進行并行壓縮,整個壓縮過程主要包括:1、處理器將原文件分成各個子數(shù)據(jù)塊,比如,將文件拆分成n個子文件,即子文件1、子文件2直到子文件n,并統(tǒng)計各個子文件的個數(shù),比如為n個;2、處理器根據(jù)子文件的個數(shù)(即n),計算出擴展數(shù)據(jù)的長度(XLEN),并申請存儲擴展數(shù)據(jù)所占用內(nèi)存;3、處理器將各個子數(shù)據(jù)塊被傳輸?shù)綄母鱾€壓縮引擎(壓縮引擎組),所述每個壓縮引擎對所述對應各個子文件進行并行壓縮,并計算數(shù)據(jù)塊的CRC32值;4、各壓縮引擎在把各個子文件壓縮成壓縮子文件后,把壓縮子文件的長度和原子文件的CRC32值存儲到擴展可選項中的額外可選項中,其中子文件的長度是以bit為單位;同時,還需要將各個子文件的個數(shù),以及擴展數(shù)據(jù)的長度的存儲到擴展可選選中的額外可選項中;5、當所有數(shù)據(jù)塊壓縮好后,處理器把額外可選項添加到壓縮文件的頭部對應位置(即擴展可選項),然后合并所述壓縮子文件,得到壓縮文件。在該壓縮的實施例中,因為擴展數(shù)據(jù)信息是按原先的GZIP方式進行編寫,所以按這個方式壓縮的文件,任何能解壓其他GZIP格式壓縮包的程序或者解壓引擎都可以對這個文件進行解壓縮,只是不能發(fā)揮并行解壓縮的優(yōu)勢。如果想提交解壓縮的效率,可以采用本實施例提供的并行解壓縮。還請參閱圖8,為本發(fā)明實施例提供的一種文件解壓縮方法的應用實例的流程圖;如圖 所示,該解壓縮方式主要是利用硬件或者軟件的多個解壓縮引擎(即解壓縮引擎組)對個block塊進行并行解壓縮,整個解壓縮過程主要包括:1處理器從壓縮文件中擴展選項中的額外可選項中獲取各個block(即壓縮子文件或壓縮數(shù)據(jù)塊)的個數(shù)和各block的長度,并根據(jù)各個block的個數(shù)和各block的長度對所述壓縮文件進行分塊,得到各個block,比如block1、block2直到blockn。2處理器將各個block并行放入對應的各個解壓引擎中;3、各個解壓引擎對各個block進行并行解壓,并計算各block塊對應的CRC值。4、處理器在各個解壓引擎對各個block塊解壓成數(shù)據(jù)塊后,讀取各個block對應的額外可選項中的CRC值;5、處理器比較解壓后計算的各個block對應的CRC值與讀取的各個block對應的CRC32值,如果二者相同,則確認該數(shù)據(jù)塊與原數(shù)據(jù)塊一致。6、當所有block解壓完畢后,合并所述解壓的數(shù)據(jù)塊,得到原文件。需要說明的是,在本文中,諸如第一和第二等之類的關系術語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關系或者順序。而且,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當然也可以通過硬件,但很多情況下前者是更佳的實施方式?;谶@樣的理解,本發(fā)明的技術方案本質上或者說對現(xiàn)有技術做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品可以存儲在存儲介質中,如ROM/RAM、磁碟、光盤等,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例或者實施例的某些部分所述的方法。以上所述僅是本發(fā)明的優(yōu)選實施方式,應當指出,對于本技術領域的普通技術人員來說,在不脫離本發(fā)明原理的前提下,還可以作出若干改進和潤飾,這些改進和潤飾也應視為本發(fā)明的保護范圍。
當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1