專利名稱:數(shù)據(jù)壓縮系統(tǒng)和方法
技術領域:
該發(fā)明涉及數(shù)據(jù)壓縮領域,特別是涉及基于因子迭代無損壓縮進行數(shù)據(jù)壓縮的系統(tǒng)和方法。
背景技術:
電二進制文件存在許多不同格式以用于許多不同用途。這些格式包括適用于圖像、聲音、文本、數(shù)據(jù)、可執(zhí)行文件等等的存儲的格式。
如果未進行加密,那么包含數(shù)據(jù)的二進制文件,趨向于結(jié)構(gòu)格式。通常存在標題信息、文本、重復(repetition)和其它組成部分之間的定位(positioning)。通常,二進制文件中的開始幾個字節(jié)包含與該二進制文件兼容的文件類型且因此應用程序的指示符。可執(zhí)行文件或者用于執(zhí)行任何類型的功能的文件都具有相當少的結(jié)構(gòu)格式。然而,作為這些文件的結(jié)構(gòu)要素或者必須與操作系統(tǒng)相互作用以執(zhí)行功能,或者它們是操作系統(tǒng)的一部分。
由于通過設計,經(jīng)過壓縮和編碼的文件去除文件內(nèi)的重復值,所以它們具有最小結(jié)構(gòu)。在加密情況下,密鑰用來定義替換值。對于壓縮而言,“速記(shorthand)”被用于重復結(jié)構(gòu)。在經(jīng)過加密或者壓縮的文件的情況下,所述文件將不僅內(nèi)部結(jié)構(gòu)改變,而且特別在壓縮情況下,文件的大小也改變。
從數(shù)學上說,對于大小為1,048,576字節(jié)(1Mb)的二進制文件而言,存在有2561,048,576種字節(jié)排列的可能結(jié)構(gòu)。而在實際使用中,僅僅使用這個數(shù)字的一小部分。根據(jù)若干不同文件類型、可執(zhí)行或者可操作的文件的功能的估計以及可用的壓縮和加密例程,實際上使用的數(shù)目僅僅是接近于該數(shù)目。
存在許多現(xiàn)有技術來對數(shù)據(jù)文件執(zhí)行數(shù)據(jù)壓縮。一些數(shù)據(jù)壓縮算法是基于索引技術的,并且涉及所述數(shù)據(jù)文件內(nèi)的惟一值的計算和索引。在大多數(shù)已壓縮的數(shù)據(jù)文件中,在每個256字節(jié)代碼段內(nèi)存在一些數(shù)據(jù)值的重復。在平均文件中,每256字節(jié)代碼段僅僅有160至170個惟一的非重復值。利用這個數(shù)目的值,基于階乘計算的數(shù)據(jù)壓縮技術無法很好地工作。
發(fā)明內(nèi)容
在一個方面,本發(fā)明提供了一種用于壓縮數(shù)據(jù)文件的方法,該數(shù)據(jù)文件包含其長度大于或等于預定長度的字節(jié)序列,所述方法包括步驟從次級存儲裝置檢索所述數(shù)據(jù)文件;將該數(shù)據(jù)文件存儲在直接存取存儲器中;計算所述數(shù)據(jù)文件的子序列內(nèi)的惟一字節(jié)值的頻率,所述子序列的長度不超過所述預定長度;創(chuàng)建所述子序列的索引,該索引包括表示計算出的所述子序列內(nèi)的惟一字節(jié)值的頻率的數(shù)據(jù)值;以及在所述子序列具有低于預定閾值的惟一字節(jié)值的頻率時,將數(shù)據(jù)變換應用于所述子序列,以增加所述子序列中的惟一字節(jié)值的頻率,并且將表示所述數(shù)據(jù)變換的數(shù)據(jù)值添加到所述索引;在所述子序列具有高于預定閾值的惟一字節(jié)值的頻率時,將表示一個或多個惟一值在所述子序列中的位置的數(shù)據(jù)值添加到所述索引;創(chuàng)建輸出數(shù)據(jù)文件,該數(shù)據(jù)文件具有文件類型標識符;以及將所述索引添加到所述輸出數(shù)據(jù)文件。
現(xiàn)在將參考附圖描述本發(fā)明的數(shù)據(jù)壓縮系統(tǒng)和方法的優(yōu)選形式,其中圖1示出本發(fā)明的系統(tǒng)的優(yōu)選形式;圖2,3和4示出本發(fā)明的優(yōu)選形式的壓縮過程的流程圖;圖5示出本發(fā)明優(yōu)選實施例的預期壓縮結(jié)果的表格;圖6舉例說明本發(fā)明的另一方面,其涉及多重復字節(jié)壓縮增強;以及圖7也舉例說明本發(fā)明的另一方面,其涉及多重復字節(jié)壓縮增強。
發(fā)明詳述本發(fā)明提供一種數(shù)據(jù)壓縮系統(tǒng)和方法,其旨在應用于數(shù)據(jù)文件5。數(shù)據(jù)文件5可以是任何合適的數(shù)據(jù)格式,其包括BMP、WAV、DOC、XLS、MDB、ZIP、SIT、ARJ、ZOO、TIF、JPG、GIF、MP3、MP4等等。數(shù)據(jù)文件5可以存儲在形成計算裝置15的一部分或者至少與其接口的次級存儲裝置10中。計算裝置15至少包括與直接存取存儲器25和顯示器30接口的處理器20。應當明白的是,計算裝置可以包括其它的組成部分或者與其它的組成部分接口,比如數(shù)據(jù)輸入裝置(未示出)和輸出裝置(未示出)。
可以預料的是,數(shù)據(jù)文件5包含其長度大于或等于預定長度的字節(jié)序列。在本發(fā)明的一種優(yōu)選形式中,該預定長度是300字節(jié)。
在操作中,計算裝置15的處理器20從次級存儲裝置10檢索所有或者部分數(shù)據(jù)文件5。該檢索出的數(shù)據(jù)文件或者部分被存儲在直接存取存儲器25中。各種操作是針對其中存儲的數(shù)據(jù)文件或者其部分進行的。在直接存取存儲器25中創(chuàng)建最終得到的輸出數(shù)據(jù)文件35,并且將其存儲在次級存儲裝置10或者其它的次級存儲裝置中。期望的是,在多數(shù)情況下,輸出數(shù)據(jù)文件35的大小將小于數(shù)據(jù)文件5的大小。
首先檢查數(shù)據(jù)文件5的子序列。子序列的長度優(yōu)選不超過預定長度300字節(jié)。如果所述識別出的惟一值的數(shù)目降到閾值之下,那么可以在一次嘗試中將一系列數(shù)據(jù)變換應用于該子序列中,以增加所述子序列中的惟一字節(jié)值的頻率。
多個數(shù)據(jù)變換組成部分40被存儲在直接存取存儲器25中或者次級存儲裝置中。所述數(shù)據(jù)變換組成部分40可以包括多個隨機產(chǎn)生的字節(jié)值的序列或者字節(jié)值的預定序列。該序列被存儲為掩碼結(jié)構(gòu)45。除了數(shù)據(jù)變換組成部分之外,可供選擇地的或者優(yōu)選地,還包括多個掩碼公式50,該掩碼公式可用于產(chǎn)生另外的掩碼結(jié)構(gòu)45。數(shù)據(jù)變換組成部分的應用將在下面進一步進行描述。
所述系統(tǒng)還包括多個索引組成部分60。在該數(shù)據(jù)文件5的子序列的處理期間,創(chuàng)建隨后將被寫入輸出數(shù)據(jù)文件35中的索引65。所述索引組成部分60還可以包括臨時位置索引70、位置索引75和置換索引(permutation index)80。在某些情況下,位置索引75和置換索引80的內(nèi)容將被添加到所述索引65中。下面將對各種索引組成部分60的操作進行進一步的描述。
所述系統(tǒng)還可以包括在直接存取存儲器25或者次級存儲裝置中存儲的數(shù)據(jù)陣列90。在數(shù)據(jù)陣列90的內(nèi)容被寫入輸出數(shù)據(jù)文件35之前,該數(shù)據(jù)陣列90可用于存儲各種索引組成部分60和正在被壓縮的數(shù)據(jù)文件5的子序列的部分。
圖2至4舉例說明本發(fā)明的優(yōu)選形式的操作。二進制數(shù)據(jù)文件5優(yōu)選地被分段成多個數(shù)據(jù)組。在本發(fā)明的一種優(yōu)選形式中,各個數(shù)據(jù)組優(yōu)選為300字節(jié)或者更少。然而,應當明白的是,正在被壓縮的數(shù)據(jù)組的大小可以是超過五位的任何大小。該數(shù)據(jù)文件首先被檢驗200,以確定數(shù)據(jù)文件的長度是否大于或等于預定長度。在本發(fā)明的一種優(yōu)選形式中,初始的預定長度是300字節(jié)。在一種形式中,整個數(shù)據(jù)文件可以從次級存儲裝置檢索到,并且將整個數(shù)據(jù)文件存儲在隨機存取存儲器25的數(shù)據(jù)陣列90中?;蛘撸瑪?shù)據(jù)文件5的部份可以從次級存儲裝置10中檢索出作為數(shù)據(jù)流。
數(shù)據(jù)組被計數(shù)205,以便計算該數(shù)據(jù)組內(nèi)惟一數(shù)據(jù)值的頻率。將惟一數(shù)據(jù)值的頻率與預定閾值相比較210。在一種優(yōu)選形式中,預定閾值為256。如果在300字節(jié)子序列內(nèi)存在少于256個惟一值,那么可以在一次嘗試中將一個或多個數(shù)據(jù)變換應用于該子序列,以增加該子序列內(nèi)惟一字節(jié)值的頻率。
如果300字節(jié)內(nèi)的惟一字節(jié)值的頻率降到256個值的預定閾值之下,那么測試215子序列,以識別數(shù)據(jù)變換“掩碼”是否適用于所述子序列。在本發(fā)明的一種優(yōu)選形式中,結(jié)構(gòu)庫被維持在比如直接存取存儲器25之類的計算機存儲器中。該庫優(yōu)選包括多個隨機產(chǎn)生的數(shù)據(jù)集。這些數(shù)據(jù)集中的每個可以利用數(shù)據(jù)集標識符來識別,所述數(shù)據(jù)集標識符存儲在計算機存儲器中并且與各個隨機產(chǎn)生的數(shù)據(jù)集相關聯(lián)。
在一種形式中,至少一個隨機產(chǎn)生的數(shù)據(jù)集的長度基本上等于數(shù)據(jù)文件的子序列的長度。換句話說,所述子序列中的字節(jié)的數(shù)目與在變換數(shù)據(jù)集或者掩碼中的字節(jié)數(shù)目相同。基于相應的字節(jié)值和所述檢索到的變換數(shù)據(jù)集,通過將數(shù)據(jù)變換應用于所述子序列中的各個字節(jié)值,可以將這種掩碼應用于所述子序列中。
數(shù)據(jù)變換的一個實例的是模數(shù)加法。將所述子序列的第一字節(jié)值和所述數(shù)據(jù)集的第一字節(jié)值加在一起,然后對總數(shù)進行模256的計算。例如如果所述子序列的第一個二進制值是168,而所述識別出的數(shù)據(jù)集的第一個二進制值是203,那么合并后的總數(shù)是371。由371進行MOD256的計算后的變換值是115。然后利用所述數(shù)據(jù)集中的第二字節(jié),以同樣的方式變換所述序列中的第二字節(jié)。然后基于所述數(shù)據(jù)集中的第三字節(jié)來變換在所述子序列中的第三字節(jié),等等。
按照這種方式,將所述掩碼應用220到所述子序列。
在一種形式中,在計算機存儲器中可以存儲有65,536種掩碼結(jié)構(gòu),各個掩碼具有數(shù)據(jù)集標識符,該數(shù)據(jù)集標識符的形式為0和65,536之間的索引號。所述索引可以是指向相關數(shù)據(jù)集標識符的簡單的14位段。
該數(shù)據(jù)變換組成部分40可以包括掩碼公式(formula),例如·300字節(jié)或者更少字節(jié)的數(shù)據(jù)文件的在前(preceding)序列的標準誤差。應當明白的是,由于數(shù)據(jù)文件的第一個序列沒有在前子序列,因而該公式不可用于數(shù)據(jù)文件的第一個序列。
·基于上述的子序列或者標準偏差來對所述子序列內(nèi)的值進行反序(Reversal)。
·基于子序列的結(jié)構(gòu)計算的適用結(jié)構(gòu)。
·基于文件結(jié)構(gòu)隨機產(chǎn)生的段,其被添加到所述相關子序列或者從相關子序列中減去。
上述公式可以被預先應用來產(chǎn)生一系列掩碼結(jié)構(gòu)。或者,在數(shù)據(jù)變換期間,可以計算相關字節(jié)值。在一種形式中,512個隨機產(chǎn)生的結(jié)構(gòu)或者掩碼結(jié)構(gòu)可以被存儲在直接存取存儲器25中。這些結(jié)構(gòu)被應用于可以在300字節(jié)序列內(nèi)具有256或更多個0值的數(shù)據(jù)文件的子序列。在形成許多軟件應用程序的二進制文件部分的標題中,這是常見的。這些隨機產(chǎn)生的結(jié)構(gòu)還可以被應用于具有高重復級的其它格式中。
在所述子序列上的數(shù)據(jù)變換之后,再次對所述子序列進行測試210,以識別所述300字節(jié)內(nèi)是否存在256個惟一值。如果不存在256個惟一值,并且沒有另外的掩碼應用于該子序列中,那么300字節(jié)的閾值被降低并且在較小的子序列上重復所述過程。在一個優(yōu)選實施例中,閾值可以被臨時地降低到152個7位值或者77個6位值以檢查少于300個8位值(字節(jié))。然后將閾值提升到300字節(jié),以用于下一個子序列。以下將進行更為詳細的描述。
添加隨機文件未必將在256字節(jié)段內(nèi)創(chuàng)建256個惟一值,但是有大約10%的可能??梢灶A料的是,一旦已經(jīng)應用適當?shù)碾S機文件結(jié)構(gòu),那么在不超過300字節(jié)的數(shù)據(jù)段內(nèi)將有256個惟一值。在任何情況下,數(shù)據(jù)變換的目的是增加數(shù)據(jù)組中的惟一數(shù)據(jù)值的頻率。
本發(fā)明計算所述數(shù)據(jù)組內(nèi)的300個數(shù)據(jù)值的索引。
所述索引被優(yōu)選存儲在直接存取存儲器25中的數(shù)據(jù)陣列90中。首先,利用兩位來創(chuàng)建300個數(shù)據(jù)值的索引。如果在300字節(jié)數(shù)據(jù)組內(nèi)已經(jīng)識別出256個惟一值,那么位值“01”被寫入225到所述索引中。
在掩碼已經(jīng)被應用于所述子序列的情況下,所述掩碼或者數(shù)據(jù)集標識符隨后被寫入230所述索引。該掩碼標識符將優(yōu)選為16位值,其識別在0和65,536之間的掩碼值。所述掩碼標識符中的值0表示這樣的事實即沒有掩碼或者零掩碼已經(jīng)被應用于所述子序列中。在零數(shù)據(jù)集被應用于所述子序列中的情況下,經(jīng)過數(shù)據(jù)變換后的所述子序列基本上和數(shù)據(jù)變換之前的所述子序列相同。
本發(fā)明的方法中的下一步是創(chuàng)建235臨時位置索引。
在正從300字節(jié)數(shù)據(jù)組中提取256個惟一值的情況下,臨時位置索引創(chuàng)建方法開始于所述數(shù)據(jù)組中的第一字節(jié),并且檢查所述數(shù)據(jù)組中的隨后字節(jié),直到256個惟一值已經(jīng)被識別出。如果被檢查到的特定值是該數(shù)據(jù)值在該數(shù)據(jù)組或者前面數(shù)據(jù)組中的第一次出現(xiàn),那么“1”位值被添加到臨時索引中。另一方面,如果被檢查到的數(shù)據(jù)值是較早數(shù)據(jù)值的重復,那么“0”位值被寫入到所述索引中。一旦已經(jīng)將256個“1”位寫入到所述索引中,那么索引方法終止。
所述臨時索引便于將所述數(shù)據(jù)組中的每個數(shù)據(jù)值容易地放置在最終得到的壓縮位流中且在最終得到的壓縮位流中識別所述數(shù)據(jù)組中的每個數(shù)據(jù)值。所述索引中的“1”值的數(shù)目表示使用了多少個位值。舉例來說,如果臨時索引中的283個條目(entries)后,在臨時索引中出現(xiàn)了256個“1”值,那么這表示在所述子序列的283個字節(jié)內(nèi)存在256個惟一字節(jié)值。
如果在300字節(jié)數(shù)據(jù)組內(nèi)存在256個或更多值,那么所述索引的開始兩位將已經(jīng)被設置為“01”。當所述臨時索引可以被簡單地添加到主索引時,存在存儲該信息的更為有效的方法。在所述子序列中出現(xiàn)的“1”值的數(shù)目是已知的。如果不考慮它們出現(xiàn)的次序,那么僅僅需要記錄惟一字節(jié)值的情形(instances)的數(shù)目。
優(yōu)選創(chuàng)建240位置索引并且將該位置索引寫入到主索引中,而非記錄臨時索引本身。對于300字節(jié)子序列而言,在臨時索引包括其后跟隨44個“0”值的256個“1”值的情況下,可以為此分配位置索引“0“。在300字節(jié)數(shù)據(jù)組內(nèi)排列44個“0”值和256個“1”值的方式的數(shù)目是nCr。這意味著,在存在256個“1”值和44個“0”值的情況下,在300個值內(nèi)存在300!/256!.44!種可能組合,該組合數(shù)等于1.34×1053。
這種最大位置索引值1.34×1053小于值2177,該值需要177位來進行表示。
這意味著,通過利用在臨時索引中存在有至少256個“1”值的事實,位置索引可以被記錄為177位或者22.125字節(jié),而非存儲300位的實際臨時索引。
記錄數(shù)據(jù)組內(nèi)的數(shù)據(jù)值的次序以啟動壓縮以及解壓縮同樣也是重要的。這是通過創(chuàng)建245置換索引并且通過將該置換索引寫入主索引來實現(xiàn)的。
置換索引計算是基于256個惟一值可被排序的方式的數(shù)目或者在不重復的情況下256個值的置換的數(shù)目的。對于第一個值,存在256種可能性,對于第二值,存在255種可能性,對于第三值,存在有254種可能性,等等。這被表示為256!,稱為“256的階乘”。256個惟一值的可能置換的數(shù)目因此是8.57×10506。由于21684等于8.6×10506,其大于8.57×10506,所以該值可以由1,684位來表示。1,684位等效于210.5個字節(jié)。
序列0,1,2,3,4…,254,255將被表示為置換編號1,而序列255,254,253×3,2,1,0將由置換編號8.57×10506表示。
將所述置換索引寫入主索引中。到現(xiàn)在為止,所述主索引將包括表示計算出的所述子序列內(nèi)惟一位值的頻率的數(shù)據(jù)值。這將是位值“01”,其后繼之表示掩碼已經(jīng)被應用的16位,隨后是表示位置索引的177位,隨后是表示置換索引的1,684位。
在到達這樣的一點后在該點上,或者在數(shù)據(jù)文件中沒有留下足夠的位來獲得足夠長度的子序列,或者沒有留下充足的唯一值,那么索引就被寫入250輸出文件中。
該輸出文件優(yōu)選包括三個初始字節(jié)來標識文件類型。在所述文件類型標識符之后的另兩個字節(jié)表示本發(fā)明的方法已經(jīng)在特定數(shù)據(jù)文件上運行的次數(shù),直到最大65,536次重復。
在這五個字節(jié)之后,在數(shù)據(jù)陣列90中存儲的索引被添加到輸出文件。在所述索引之后增加的是這些索引中未用的、或者由于缺乏保持在數(shù)據(jù)文件中的足夠位值的任何值或者唯一值的任意值。
在大多數(shù)情況下,期望的是,存在五個標題字節(jié),其后繼之以主體,以及在輸出文件末端以完整的未壓縮的形式寫入的63或者更少位值。所述輸出文件的主體優(yōu)選是被連續(xù)地寫入的索引的集合,以便于以流的方式進行提取。
如圖2所述,存在這樣的情形在本發(fā)明的方法的多次迭代之后,在所述數(shù)據(jù)文件中不再剩余300字節(jié),或者存在有300字節(jié)的子序列,在該子序列中,不存在256個惟一值并且沒有另外的掩碼適用。如在260中所示,在一種優(yōu)選形式中,從所述數(shù)據(jù)文件檢索到的子序列的大小可以減少。
參考圖3,檢驗305數(shù)據(jù)文件以識別在所述數(shù)據(jù)文件中是否剩余至少152個字節(jié)。
如果在所述數(shù)據(jù)文件中剩余至少133個字節(jié),該133個字節(jié)包含152個7位值,那么在所述152個7位值內(nèi)的惟一值的數(shù)目被計數(shù)310。然后相對于例如128的閾值數(shù)目來檢驗315惟一值的數(shù)目。如果在133字節(jié)子序列中不存在足夠的惟一值,那么識別適用的掩碼(步驟340)并且按類似方式將該適用的掩碼應用于圖2的步驟215和220中(步驟345)。
一旦在所述數(shù)據(jù)文件中的152個7位值中識別出惟一值的閾值數(shù)目,那么位序列“10”被寫入350到所述索引中,并且該方法繼續(xù)前進到圖2中的230表示的步驟。
如果在所述數(shù)據(jù)文件中不存在剩余來待處理的152個7值,或者128個惟一值不能位于1527位子序列內(nèi)并且如355所示沒有另外的掩碼適用,那么該方法轉(zhuǎn)到圖4所示的步驟。如圖4所示,處于檢查中的數(shù)據(jù)文件中的位組的數(shù)目被減少到77個6位值。如果存在405剩余在數(shù)據(jù)文件中的77個6位值,那么在77個6位值中的惟一值的數(shù)目被計數(shù)410。
相對于閾值64來檢驗415惟一值的數(shù)目。如果在所述77個6位值中存在小于64個惟一值,那么該方法確定420掩碼是否適用。如果掩碼適用,那么應用425該掩碼。這最后二個步驟420和425類似于圖2的步驟215和220和圖3的步驟340和345。
如果在77個6位子序列中存在64個惟一值,那么值“11”被寫入430到所述索引中。然后控制返回到圖2中的前面步驟230。
如果在數(shù)據(jù)文件中不存在剩余來待處理的77個6位值,或者在所述77個6位值序列內(nèi)不存在64個惟一值,那么位值“00”被寫入435到所述索引中,按照與圖2所示的步驟250一樣的方法將所述索引寫入到輸出文件,并且所述數(shù)據(jù)文件中的剩余字節(jié)被寫入到所述輸出文件中。
應當明白的是,取決于處于檢查中的字節(jié)的數(shù)目,如圖2的步驟245所示,置換索引需要微小變化。當在152個7位組內(nèi)存在128個惟一數(shù)據(jù)值的情況下,位置索引將為152!/128.24!,其等于5.48×1027。由于293=9.9×1027,所以這可以由93位來表示。
當在77個6位組內(nèi)存在64個惟一值時,所述索引將為77!/64!/.13!。248=2.81×1014,其大于前者值1.84×1014,所以這可以由42位來表示。
類似地,取決于處于檢查中的字節(jié)的數(shù)目,如圖2中的步驟245所示,置換索引需要微小變化。128個值的置換為128!或者3.86×10215。由于2717=6.89×10215,所以這需要717位來表示。
64個值的置換是64!或者1.27×1089。由于2296=1.27×1089,所以這可以由296位來表示。
圖5舉例說明關于數(shù)據(jù)組大小為377字節(jié)(8位組)、350字節(jié)、320字節(jié)、300字節(jié)、152個7位組和77個6位組的預期結(jié)果的表格。該表格所包括的是所包含的變化的效果的指示。描述如下。
解壓縮僅僅是將上述過程反向。索引值表示從第一個到最后一個(第256)的各個值的范圍。假設所述范圍提供相關值。則索引可以被用于與所述標題一起重構(gòu)。由于所有組成部分被一起打包,所以可以設想的是使用流。
如果存在更為有效的方法,那么可以根據(jù)用于段的“0”和“1”值的字串來改變重復值的放置的索引。例如,如果存在僅僅一個或兩個重復值,那么字節(jié)的數(shù)目將為257或者258。已知的是,對于該段而言,所述第一個字節(jié)和最后一個字節(jié)是惟一的,而不是使用第257位和第258位。因此,在257個值的情況下,8位將提供單個重復值的位置,而在258個字節(jié)段情況下,16位將提供兩個重復值的位置。
所述方法可以被應用于所有文件類型和結(jié)構(gòu)。對于利用諸如PKWare的ZIP產(chǎn)品之類的工具來相當?shù)臄?shù)量地壓縮的文件類型或者結(jié)構(gòu),在一次完成(single pass)上本發(fā)明的方法不會達到相同的程度。然而,該方法可以被重復地應用于相同的文件,每次在大小上減小。所述次數(shù)或者重復次數(shù)取決于硬件處理和/或用戶需求時間。
由于所有組成部分是已知的,所以解壓縮非???。由于壓縮需要對隨機數(shù)據(jù)結(jié)構(gòu)進行匹配時,所以解壓縮比壓縮更快。
由于所有的索引被包含在實際數(shù)據(jù)本身中,那么可以同時地執(zhí)行多個解壓縮例程。
其它的應用程序可以包括軟件壓縮,數(shù)據(jù)壓縮,在掌機(console)之間的在線游戲以及語音IP和/或視頻點播等,所述掌機諸如是索尼游戲站2、微軟公司X-Box等。該本發(fā)明具有以任何格式在任何地方存儲、發(fā)送或者使用的數(shù)據(jù)或者二進制信息的應用程序。
上述描述是基于在300字節(jié)代碼段或者更小的代碼段內(nèi)的256個惟一值的。應當明白的是,這種選擇的大小是僅僅用于示例性的目的。
可以使用這方法重構(gòu)5位或更多位的數(shù)據(jù)組,或者在0和31之間的值。減少隨機產(chǎn)生的數(shù)據(jù)集的數(shù)目或者覆蓋文件意味著還可以使用3位值和4位值。
使用比所述8位(256值)更大的位值可以實現(xiàn)更大的節(jié)省。例如,在9位值被壓縮的情況下,與利用8位壓縮達到的相比,其在壓縮時有進一步的好處。
節(jié)省或者壓縮隨著每值使用的位的數(shù)目的增加而增加。256個值(300字節(jié)段)的壓縮不能與512個值(600字節(jié)段)的壓縮一樣多。依次,512個值數(shù)據(jù)的壓縮不能與1024個值的壓縮一樣多。由于計算必須是基于文件大小的,因而不存在較高的確定級別。
通過使用上述300字節(jié)的方法,這可以被擴展至377字節(jié)組。這意味著,所述有效范圍是256至377字節(jié)組,其中對于在本說明書中描述的以及在圖5舉例說明的優(yōu)選實施例而言,300字節(jié)是最佳級別。
針對300個8位組(字節(jié)),152個位組以及77個位組的變化可以在壓縮文件的標題中指示出。該變化可以包括兩個(2)部分。它們是1.每段大小的相關位組的數(shù)目的指示。對于8位組而言,大小范圍是256至377,其由7位來表示。對于7位組而言,范圍可能以5位表示,而對于6位組而言,范圍可以以4位表示。
2.可以在上述每一個的末端添加另一位,以表示在每一位組內(nèi)是否出現(xiàn)變化?!?”表示No(否),而“1”表示Yes(是)。
因此,所述標題包含表示上述值的另外的19位。
如果對于每個標題,變化值是允許的,那么可以將變化值逐組地寫入到所述索引中。
例如,在一組8位組上的缺省可能是300個值,但是各個段可以在256和377個值之間變化,如所包括的變化值所表示的。
本發(fā)明的另外實施例可以涉及多重復字節(jié)壓縮增強,并且將參考圖6和7對此進行描述。
功能電子文件分成若干不同種類的字節(jié)結(jié)構(gòu)。這些從簡單的2顏色位圖變化到使用任何目前可用的無損壓縮算法壓縮的文件。
對于標題信息之后的2色位圖而言,一個位值意味著黑色,另一個位值意味著白色。由于存在大量重復,所以以無損耗方式對這些文件進行壓縮是簡單的。
移動到24位位圖,圖案的識別變得更加困難,由此使用現(xiàn)有算法進行的無損壓縮比率不如針對更簡單的位圖結(jié)構(gòu)進行的無損壓縮比率一樣大。
這里描述的處理將更簡單的圖案引入到24位位圖,對于標準照片類型圖像,其允許使用任何目前可用的無損壓縮算法,以顯著地增加壓縮量。
為了實現(xiàn)這個目的,如圖6中的步驟610所例示,原始圖像被分解為3個組成部分,其中合并的尺寸明顯地大于所述原始圖像。
然后,如620中所示,所有3字節(jié)(24位)組按照升序的十進制數(shù)進行排列。例如,236,217,67被重新排序為67,217,236。使用Huffman結(jié)構(gòu),將在字節(jié)排列中的變化記錄在所述索引中。
由于僅僅有6種可能的原始結(jié)構(gòu),利用以下位索引來記錄這些00=12301=132100=213101=231
110=312111=321上面數(shù)字中的每一個表示當與它們的排序后的放置相比時所述字節(jié)的原始位置。
一旦圖像已經(jīng)被完全地掃描,這個索引被寫入到文件(文件A)中,如625中所示。
然后,如630中所示,所有最低的或每個組的當前第一字節(jié)值被寫入到一不同的文件(文件B)中。
如635中所示,由于字節(jié)值是有序的,第二字節(jié)值減第一字節(jié)值的值被寫入到文件(文件C)中,其后繼之第三字節(jié)值減第二字節(jié)值的值。
這樣已經(jīng)創(chuàng)建了3個文件文件A、文件B和文件C。文件B和文件C的合并總數(shù)將與原始24位位圖相同。由于文件A表示字節(jié)的索引,所以在尺寸上,文件A是額外開銷(overhead)。
如果隨后利用無損耗算法或如WINZIP之類的產(chǎn)品640將全部的三個文件(A,B和C)壓縮成一個文件650,那么得到的文件平均比通過簡單地在未修改的圖像文件上應用這些工具達到的要小25%。
測試已經(jīng)表示了2.5%下降的最壞情況,最好的情況是圖像質(zhì)量真實的24位位圖的82%。利用JPEG的無損壓縮模式可以產(chǎn)生相同的效果。
可以利用3個字節(jié)組將該過程應用于任何文件結(jié)構(gòu)以保持數(shù)據(jù)。它可能同時擴大為覆蓋4,5,6,7,8等等字節(jié)結(jié)構(gòu),以達到無損壓縮的更高級別。
由于位圖文件被用于顯示圖象,Wave(.wav)文件用于播放聲音?,F(xiàn)在將參考圖7,來描述涉及Wave格式文件的壓縮增強處理的另一個例子。由于存在不同級別的位圖文件(2位、4位、8位、10位、12位、16位、24位和30位),其中每個位圖提供更多顏色或者質(zhì)量,對于Wave文件發(fā)生相同的情況。
利用若干組成部分來創(chuàng)建Wave文件,這些組成部分是平均采樣速率、采樣速率、聲音樣本大小和通道數(shù)目。
較低的采樣速率意味著較小文件,但是具有較低質(zhì)量。單聲道文件同樣小于立體聲文件。
在此被尋址的Wave格式,是將完整品質(zhì)立體聲音樂存儲在商用CD上時使用的格式。這個格式是從Wave格式轉(zhuǎn)換成CD格式。
對于具有176.4Kb/秒的平均數(shù)據(jù)速率、44.1kHz的采樣率、16位聲音樣本大小和2(立體聲)通道的Wave文件而言,可能適用以下情況。
如果通過編號為1到n來表示所述文件中的全部的字節(jié)值,其中n是在文件中的最后字節(jié)(對于正常的聲音文件,這將是50,000,000的數(shù)量級),所有偶數(shù)位字節(jié)值被寫入到一個文件(文件A),如在725所示,而所有奇數(shù)位字節(jié)值被寫入到另一不同文件(文件B),如在730所示。例如
如果隨后利用無損耗算法或如WINZIP之類的產(chǎn)品將兩個文件(文件1和文件2)壓縮成一個文件,再次如640所示,那么得到的文件650平均比通過簡單地在未修改的圖像文件上應用這些工具達到的要小20%。
測試已經(jīng)暗示了在最壞情況下,已壓縮文件的大小有10%額外的下降,在最好的情況下,在大小上有43%的下降。
提取/解壓縮是簡單的,在使用相關的無損耗工具解壓縮文件1和文件2之后,文件2的字節(jié)被重新插入到文件1的每個字節(jié)之間。
以上描述了包括其優(yōu)選形式的本發(fā)明。對于本領域技術人員而言,改變和修改是顯而易見的,其趨于并入所附權利要求定義的范圍內(nèi)。
權利要求
1.一種用于壓縮數(shù)據(jù)文件的方法,所述數(shù)據(jù)文件包含其長度大于或等于預定長度的字節(jié)序列,所述方法包括步驟從次級存儲裝置檢索所述數(shù)據(jù)文件;將所述數(shù)據(jù)文件存儲在直接存取存儲器中;計算所述數(shù)據(jù)文件的子序列內(nèi)的惟一字節(jié)值的頻率,所述子序列的長度不超過所述預定長度;創(chuàng)建所述子序列的索引,所述索引包括表示計算出的所述子序列內(nèi)的惟一字節(jié)值的頻率的數(shù)據(jù)值;以及在所述子序列具有低于預定閾值的惟一字節(jié)值的頻率時,將數(shù)據(jù)變換應用于所述子序列,以增加所述子序列中的惟一字節(jié)值的頻率,并且將表示所述數(shù)據(jù)變換的數(shù)據(jù)值添加到所述索引;在所述子序列具有高于預定閾值的惟一字節(jié)值的頻率時,將表示一個或多個惟一值在所述子序列中的位置的數(shù)據(jù)值添加到所述索引;創(chuàng)建輸出數(shù)據(jù)文件,該數(shù)據(jù)文件具有文件類型標識符;以及將所述索引添加到所述輸出數(shù)據(jù)文件。
2.如權利要求1所述的壓縮數(shù)據(jù)文件的方法,其中,所述將數(shù)據(jù)變換應用于所述子序列的步驟還包括步驟在計算機存儲器中維持多個變換數(shù)據(jù)集,所述數(shù)據(jù)集具有字節(jié)值序列并且通過變換數(shù)據(jù)集標識符而被識別;從計算機存儲器檢索一個所述變換數(shù)據(jù)集,所述檢索的變換數(shù)據(jù)集的長度基本上等于所述數(shù)據(jù)文件的子序列的長度;并且根據(jù)所述檢索的數(shù)據(jù)集中的相應字節(jié)值,將數(shù)據(jù)變換應用于所述子序列中的各個字節(jié)值。
3.如權利要求2所述的壓縮數(shù)據(jù)文件的方法,其中,在基于至少一個所述檢索的變換數(shù)據(jù)集的數(shù)據(jù)變換之后的所述子序列和所述數(shù)據(jù)變換之前的所述子序列基本上相同。
4.如權利要求2所述的壓縮數(shù)據(jù)文件的方法,其中,至少一個所述變換數(shù)據(jù)集包含隨機產(chǎn)生的字節(jié)速率序列。
5.如權利要求2所述的壓縮數(shù)據(jù)文件的方法,其中,至少一個變換數(shù)據(jù)集包含預定的字節(jié)速率序列。
6.如權利要求2所述的壓縮數(shù)據(jù)文件的方法,其中,至少一個變換數(shù)據(jù)集包含從除所述數(shù)據(jù)文件的所述子序列之外所述數(shù)據(jù)文件的一部分導出的字節(jié)值序列。
7.如權利要求2至6中任一權利要求所述的壓縮數(shù)據(jù)文件的方法,還包含步驟將應用于所述子序列的數(shù)據(jù)變換數(shù)據(jù)集的變換數(shù)據(jù)集標識符添加到所述索引。
8.如先前任一權利要求所述的壓縮數(shù)據(jù)文件的方法,還包含步驟計算一個或多個惟一值在所述子序列中的位置。
9.如權利要求8所述的壓縮數(shù)據(jù)文件的方法,其中,所述計算一個或多個惟一值在所述子序列中的位置的步驟還包含步驟在計算機存儲器中創(chuàng)建臨時位置索引;從所述子序列檢索連續(xù)字節(jié)值;在檢索每個字節(jié)值時,確定所述檢索的字節(jié)值是惟一字節(jié)值還是重復值;在檢測到惟一字節(jié)值時,將兩個位值中的一個添加到所述臨時位置索引,或者將所述兩個位值中的另一個添加到所述臨時位置索引;根據(jù)所述臨時位置索引,創(chuàng)建表示所述一個或多個惟一值的位置的位置索引;以及至少部分地根據(jù)所述位置索引,計算表示所述一個或多個惟一值的所述位置的數(shù)據(jù)值。
10.如權利要求9所述的壓縮數(shù)據(jù)文件的方法,其中,所述子序列中的字節(jié)數(shù)目基本上等于所述臨時位置索引中的位的數(shù)目。
11.如權利要求9或者10所述的壓縮數(shù)據(jù)文件的方法,其中,所述位置索引的大小小于所述臨時位置索引的大小。
12.如權利要求9至11中任一權利要求所述的壓縮數(shù)據(jù)文件的方法,還包含步驟創(chuàng)建表示惟一字節(jié)值在所述子序列內(nèi)的次序的置換索引;以及根據(jù)所述位置索引和所述置換索引,計算表示所述一個或多個惟一值的所述位置的數(shù)據(jù)值。
13.如權利要求12所述的壓縮數(shù)據(jù)文件的方法,包含步驟將所述位置索引和所述置換索引并置,以形成表示所述一個或多個惟一值的位置的數(shù)據(jù)值。
全文摘要
本發(fā)明提供一種用于壓縮數(shù)據(jù)文件的方法,所述數(shù)據(jù)文件包含其長度大于或等于預定長度的字節(jié)序列,所述方法包括步驟從次級存儲裝置檢索所述數(shù)據(jù)文件;將所述數(shù)據(jù)文件存儲在直接存取存儲器中;計算所述數(shù)據(jù)文件的子序列內(nèi)的惟一字節(jié)值的頻率,所述子序列的長度不超過所述預定長度;創(chuàng)建所述子序列的索引,所述索引包括表示計算出的所述子序列內(nèi)的惟一字節(jié)值的頻率的數(shù)據(jù)值;以及在所述子序列具有低于預定閾值的惟一字節(jié)值的頻率時,將數(shù)據(jù)變換應用于所述子序列,以增加所述子序列中的惟一字節(jié)值的頻率,并且將表示所述數(shù)據(jù)變換的數(shù)據(jù)值添加到所述索引;在所述子序列具有高于預定閾值的惟一字節(jié)值的頻率時,將表示一個或多個惟一值在所述子序列中的位置的數(shù)據(jù)值添加到所述索引;創(chuàng)建輸出數(shù)據(jù)文件,該數(shù)據(jù)文件具有文件類型標識符;以及將所述索引添加到所述輸出數(shù)據(jù)文件。
文檔編號H03M7/30GK1868127SQ200480030478
公開日2006年11月22日 申請日期2004年10月15日 優(yōu)先權日2003年10月17日
發(fā)明者布魯斯·帕克 申請人:佩茨拜特軟件有限公司