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

數(shù)據(jù)壓縮方法和設(shè)備的制作方法

文檔序號(hào):7533552閱讀:478來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):數(shù)據(jù)壓縮方法和設(shè)備的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及信息通信和存儲(chǔ)領(lǐng)域。更具體地說(shuō),本發(fā)明涉及壓縮數(shù)字化信息以減小存儲(chǔ)信息所需的存儲(chǔ)器大小。
數(shù)據(jù)壓縮被用來(lái)減小表示給定的一段信息(諸如數(shù)據(jù)流)所需的字符的數(shù)目。通過(guò)減少所用的字符的數(shù)目,數(shù)據(jù)流可被存儲(chǔ)在較小的存儲(chǔ)器中,或得到更為有效的傳送,諸如在較短的時(shí)間中或使用較小的帶寬。可以采用幾種不同的方法中的一或多種來(lái)壓縮數(shù)據(jù)。
在選擇數(shù)據(jù)壓縮方法時(shí)的兩個(gè)重要的考慮,是數(shù)據(jù)壓縮度和壓縮發(fā)生的速度。壓縮度指的是用來(lái)表示數(shù)據(jù)的字符數(shù)目的減小量。如果字符數(shù)目只是有略微的減小,則數(shù)據(jù)壓縮的好處就不如字符數(shù)目大大減小時(shí)大。類(lèi)似地,需要較多時(shí)間來(lái)壓縮數(shù)據(jù)的壓縮方法不如需要較短時(shí)間的方法好。因此,非常希望的是大大地減小表示數(shù)據(jù)所需的字符數(shù)目和運(yùn)行時(shí)間短的數(shù)據(jù)壓縮方法。
因而需要一種進(jìn)行數(shù)據(jù)壓縮的方法和設(shè)備—它們具有高壓縮度并縮短了數(shù)據(jù)壓縮所需的時(shí)間。
以上和其他的需要通過(guò)一種數(shù)據(jù)流壓縮方法而得到了滿(mǎn)足。該數(shù)據(jù)流的第一部分被讀入一個(gè)窗口中,而該窗口具有一個(gè)歷史緩存器和先行(look-ahead)緩存器。從先行緩存器中的數(shù)據(jù)流的第四部分取出的一個(gè)指標(biāo)(index)得到了選擇,且根據(jù)該指標(biāo),指針陣列中的一個(gè)登記項(xiàng)(entry)得到選擇。根據(jù)該指針陣列登記項(xiàng),一個(gè)記錄陣列中的一個(gè)初始登記項(xiàng)得到選擇。該記錄陣列初始登記項(xiàng)具有一個(gè)歷史緩存器地址和記錄陣列地址。數(shù)據(jù)流的一個(gè)第三部分得到選擇,該部分從初始登記項(xiàng)的歷史緩存器地址所引用的歷史緩存器中的一個(gè)地址開(kāi)始。把數(shù)據(jù)流的該第三部分與在先行緩存器中的數(shù)據(jù)流的第二部分相比較。如果數(shù)據(jù)流的第三部分不與數(shù)據(jù)流的第二部分相匹配,則根據(jù)初始登記項(xiàng)的記錄陣列地址,記錄陣列中隨后的登記項(xiàng)得到選擇,且隨后的登記項(xiàng)隨后被指定為初始登記項(xiàng)。
從選擇第三部分經(jīng)過(guò)選擇隨后的登記項(xiàng)的步驟得到重復(fù),直到數(shù)據(jù)流的第三部分與數(shù)據(jù)流的第二部分相匹配,或者在記錄陣列中沒(méi)有了剩下的登記項(xiàng)。在記錄陣列不再有剩余的登記項(xiàng)的情況下,數(shù)據(jù)流的第二部分被寫(xiě)入到輸出文件中,且讀入窗口的數(shù)據(jù)流的第一部分被增加一個(gè)預(yù)定的量。在數(shù)據(jù)流的第三部分與數(shù)據(jù)流的第二部分相匹配的情況下,數(shù)據(jù)流的第三部分的歷史緩存器地址和一個(gè)長(zhǎng)度值—它表示了數(shù)據(jù)流的第三部分與數(shù)據(jù)流的第二部分有多少字節(jié)是匹配的—被輸出到輸出文件,且讀入窗口的數(shù)據(jù)流的第一部分被增加了匹配的字節(jié)數(shù)。該方法從選擇指標(biāo)的步驟起的步驟得到重復(fù),直到所有的數(shù)據(jù)流都被讀入窗口。
通過(guò)以下結(jié)合附圖—這些附圖為了進(jìn)行更好的顯示而沒(méi)有按照比例且其中相同的部件用相同的標(biāo)號(hào)表示—所進(jìn)行的詳細(xì)描述,本發(fā)明的進(jìn)一步的優(yōu)點(diǎn)將變得顯而易見(jiàn)。在附圖中

圖1是壓縮設(shè)備的一個(gè)實(shí)施例的功能框圖;圖2顯示了形成記錄陣列登記項(xiàng)的一種級(jí)聯(lián)方法。
圖3是更新指針陣列和記錄陣列的方法的一個(gè)實(shí)施例的流程圖;圖4是采用該指針陣列和記錄陣列來(lái)選擇數(shù)據(jù)流的第三部分的一個(gè)實(shí)施例的流程圖。
在其基本形式下,數(shù)字?jǐn)?shù)據(jù)通常用一串0和1來(lái)表示。每一個(gè)0和每一個(gè)1被稱(chēng)為一位。成組的0和1(稱(chēng)為字節(jié))能夠表示不同的字符,諸如字母和數(shù)字。一個(gè)字節(jié)可由不同數(shù)目的位組成,具體根據(jù)實(shí)施該方法的硬件而確定。圖1中給出了較好的壓縮設(shè)備的功能框圖。
較好地,壓縮以用位形式的運(yùn)行段長(zhǎng)度編碼對(duì)開(kāi)始的數(shù)據(jù)流進(jìn)行轉(zhuǎn)換作為開(kāi)始。這是通過(guò)計(jì)數(shù)流中的一個(gè)運(yùn)行段中的相繼的0或1的數(shù)目,并將這些運(yùn)行段長(zhǎng)度數(shù)目寫(xiě)入到一個(gè)輸出文件中,而實(shí)現(xiàn)的。例如,表1顯示了一個(gè)32位的輸入數(shù)據(jù)流。
00001100111110000011101010000111表1. 輸入數(shù)據(jù)流在最佳實(shí)施例中,寫(xiě)入輸出文件的第一運(yùn)行段長(zhǎng)度數(shù)始終是起始的0的數(shù)目。在表1所示的例子中,起始的0的數(shù)目為4。因此,數(shù)目4首先被寫(xiě)入輸出文件中。應(yīng)該理解的是,輸出文件較好地也是一個(gè)數(shù)字文件,因而表示數(shù)4的一個(gè)0和1的位模式將被寫(xiě)入輸出文件。對(duì)于在此討論的所有被寫(xiě)入的數(shù)目,最好都是這種情況。如果輸入數(shù)據(jù)流的第一個(gè)字符是1而不是0,則一個(gè)值0將被寫(xiě)入輸出文件,表明在輸入數(shù)據(jù)流的開(kāi)始處沒(méi)有0。
在起始的0的數(shù)目被寫(xiě)入輸出文件之后,在起始的0運(yùn)行段之后的1的數(shù)目被寫(xiě)入輸出文件。在表1顯示的例子中,起始的0運(yùn)行段之后的1的數(shù)目為2。因此,2被寫(xiě)入輸出文件。按照以上的方式,0和1的運(yùn)行段長(zhǎng)度數(shù)目以交替的方式被寫(xiě)入輸出文件。如果0或1的運(yùn)行段長(zhǎng)度超過(guò)了254,則一個(gè)值255被寫(xiě)入輸出文件,該運(yùn)行段的剩余部分得到計(jì)數(shù),且該剩余的值隨后也被寫(xiě)入輸出文件。對(duì)于非常長(zhǎng)的運(yùn)行段,在剩余的值被寫(xiě)入之前會(huì)有若干個(gè)255值被寫(xiě)入輸出文件。因此,當(dāng)解壓縮輸出文件時(shí),解壓縮程序較好地是認(rèn)為值255表示下一個(gè)值應(yīng)該被加到值255上以實(shí)現(xiàn)實(shí)際的運(yùn)行段長(zhǎng)度值。
應(yīng)該理解的是,這種方法對(duì)于大于或小于32位的長(zhǎng)度的輸入數(shù)據(jù)流也同樣是可以采用的,而選擇32位的長(zhǎng)度是為了描述該方法的方便。當(dāng)表1所描述的輸入數(shù)據(jù)流中的所有0和1都借助位運(yùn)行段長(zhǎng)度編碼而得到處理時(shí),產(chǎn)生出如表2描述的輸出文件。
4,2,2,5,5,3,1,1,1,1,4,3表2.輸出文件運(yùn)行段長(zhǎng)度編碼通常在一定程度上減小了輸入數(shù)據(jù)流的長(zhǎng)度,但不是壓縮所有類(lèi)型的數(shù)據(jù)流的一種有效方法。例如,如果輸入數(shù)據(jù)流沒(méi)有幾個(gè)運(yùn)行段超過(guò)一個(gè)相繼的0或1,則輸出文件就不會(huì)比輸入數(shù)據(jù)流小很多,且處理輸入數(shù)據(jù)流所需的時(shí)間可能不值得進(jìn)行所獲得的程度的壓縮。因此,在最佳實(shí)施例中,運(yùn)行段長(zhǎng)度編碼是數(shù)據(jù)壓縮方法和設(shè)備中的可選擇的可選的第一步驟。對(duì)于其中采用了運(yùn)行段長(zhǎng)度編碼的那些情況,來(lái)自運(yùn)行段長(zhǎng)度編碼的輸出文件將被認(rèn)為是以下所描述的其他壓縮操作的輸入數(shù)據(jù)流。
輸入數(shù)據(jù)流隨后借助一種修正的滑動(dòng)窗口法而得到壓縮。在本質(zhì)上,這種方法通過(guò)尋找數(shù)據(jù)流中重復(fù)的相同字符運(yùn)行段來(lái)壓縮輸入數(shù)據(jù)流。在位運(yùn)行段長(zhǎng)度編碼的例子中,該例子將被描繪成由1和0表示的一個(gè)輸入數(shù)據(jù)流。雖然數(shù)據(jù)壓縮的滑動(dòng)窗口級(jí)的輸入數(shù)據(jù)流最好也是1和0,這些1和0可用其他的字符表示,這使得該方法更容易得到理解。
較好地,輸入數(shù)據(jù)流被讀入具有兩個(gè)部分即一個(gè)歷史緩存器和一個(gè)先行緩存器的一個(gè)滑動(dòng)窗口中。在最佳實(shí)施例中,歷史緩存器的大小為512字節(jié)和先行緩存器的大小為277字節(jié)。然而,在替換實(shí)施例中,也可選擇其他大小的歷史緩存器和先行緩存器。
該窗口被指定為滑動(dòng)窗口,因?yàn)檩斎霐?shù)據(jù)流將經(jīng)常包含比該窗口一次所能夠容納的字符多的字符。因此,只有輸入數(shù)據(jù)流的第一部分可一次得到處理,且當(dāng)前面的第一部分被處理并被寫(xiě)入輸出文件時(shí),輸入數(shù)據(jù)流的隨后的一部分被讀入窗口。輸入數(shù)據(jù)流的該隨后的部分隨后被指定為數(shù)據(jù)流的第一部分,且處理以此方式連續(xù)進(jìn)行,直到最好所有輸入數(shù)據(jù)流都得到了這樣的處理。雖然在此采用的術(shù)語(yǔ)把輸入數(shù)據(jù)流描述為被讀入窗口的,應(yīng)該理解的是這只是描述性的語(yǔ)言,且該方法的實(shí)際實(shí)施可以以若干種方式中的一或多種進(jìn)行。例如,在最佳實(shí)施例中,輸入數(shù)據(jù)流被全部或部分地保持在一個(gè)存儲(chǔ)器中,且指針被用來(lái)定義當(dāng)前處于歷史緩存器或先行緩存器中的數(shù)據(jù)流部分。
為了處理數(shù)據(jù)流的第一部分,把當(dāng)前駐留在先行緩存器中的數(shù)據(jù)流部分與當(dāng)前駐留在歷史緩存器中的數(shù)據(jù)流部分進(jìn)行比較。來(lái)自先行緩存器的被比較的數(shù)據(jù)流部分將被指定為第二部分,且來(lái)自歷史緩存器的被比較的數(shù)據(jù)流部分將被指定為第三部分。如果第二部分與第三部分之間存在著匹配,則兩個(gè)值作為一對(duì)而被寫(xiě)入輸出數(shù)據(jù)文件。第一個(gè)值表示了歷史緩存器中的數(shù)據(jù)流的第三部分的開(kāi)始地址,且第二個(gè)值表示了與第三部分匹配的第二部分的長(zhǎng)度。輸入數(shù)據(jù)流隨后通過(guò)滑動(dòng)窗口第二值的字符數(shù)—它是被發(fā)現(xiàn)匹配的字符的數(shù)目。例如,考慮表3中給出的數(shù)據(jù)流,它表示了滑動(dòng)窗口中的數(shù)據(jù)流的第一部分。為了舉例的目的,將采用20個(gè)字符的窗口大小。
0000000001111111111212345678901234567890ABCDEFGHIJKLMNOFGHOL歷史緩存器 ^ 先行緩存器表3.在20字符滑動(dòng)窗口中的輸入數(shù)據(jù)流在數(shù)據(jù)流的斷開(kāi)處之下的“^”符號(hào)表示了歷史緩存器與先行緩存器之間的分割。應(yīng)該理解的是,輸入數(shù)據(jù)流不一定是在歷史緩存器與先行緩存器之間物理分割的,而是可以采用指針或其他類(lèi)似的裝置來(lái)跟蹤哪一個(gè)數(shù)據(jù)流部分處于歷史緩存器中且哪一個(gè)數(shù)據(jù)流部分處于先行緩存器中。在數(shù)據(jù)流的字母數(shù)據(jù)之上列出的值表示了地址,如將在下面討論的。較好地,窗口在數(shù)據(jù)流得到處理的同時(shí)沿著該數(shù)據(jù)流滑動(dòng),從而使還沒(méi)有得到處理的新的數(shù)據(jù)流部分首先進(jìn)入先行緩存器,且隨后以增量的方式通過(guò)歷史緩存器,直到它們?cè)诖翱诘臍v史緩存器端退出滑動(dòng)窗口。
考慮到在先行緩存器中的數(shù)據(jù)流的第二部分是以字符F開(kāi)始的。所希望的是找到歷史緩存器中與先行緩存器中的第二部分相匹配的第三部分。在找到匹配之前,歷史緩存器中的數(shù)據(jù)流的幾個(gè)不同部分可以與第二部分相比較。例如,第二部分的開(kāi)始即字符F可以與歷史緩存器的第一個(gè)字符A—它將被指定為第三部分—相比較。當(dāng)然,這些字符不匹配,因而歷史緩存器中的數(shù)據(jù)流的隨后部分將被選為數(shù)據(jù)流的第三部分,以與第二部分進(jìn)行比較。例如,下一個(gè)第三部分可以從歷史緩存器中的下一個(gè)字符即字符B開(kāi)始。這不與數(shù)據(jù)流的第二部分匹配,因而一個(gè)隨后的第三部分將得到選擇。
歷史緩存器中數(shù)據(jù)流的起始和隨后的第三部分得到選擇的方法,能夠大大地減小找到匹配所需的時(shí)間。例如,起始的第三部分可以總是通過(guò)以歷史緩存器的第一字符開(kāi)始而得到選擇,且隨后的第三部分,可通過(guò)每次使一個(gè)字符串行通過(guò)歷史緩存器行進(jìn)直到找到匹配或到達(dá)了歷史緩存器的結(jié)束,而得到選擇。然而,可通過(guò)產(chǎn)生某些類(lèi)型的指標(biāo)來(lái)更有效地選擇起始和隨后的第三部分。這個(gè)話題將在隨后的討論中得到更詳細(xì)的考慮。
不論找到起始和隨后的第三部分的方法如何,當(dāng)在第三部分與第二部分之間找到了匹配時(shí),匹配的第三部分的開(kāi)始地址得到記錄。這種地址較好地是從歷史緩存器的開(kāi)始處的偏移值的形式的。在表3的例子中,歷史緩存器中的匹配F的地址是6。該地址6成為寫(xiě)入輸出文件的輸出對(duì)的第一個(gè)值。將要寫(xiě)入的下一個(gè)值是與第二部分匹配的第三部分的長(zhǎng)度。在所述的例子中,F(xiàn)GH的第二部分與FGH的第三部分匹配,因而表示第三和第二部分中的三個(gè)匹配字符的值3作為輸出對(duì)的第二值而被寫(xiě)入輸出文件。
應(yīng)該理解的是,在歷史緩存器中可能有一個(gè)以上的第三部分與先行緩存器中的第二部分相匹配。在這種情況下,必須采用一種方法來(lái)決定匹配的第三部分中哪一個(gè)是最好的匹配。較好地,與第二部分的最大數(shù)目的字符相匹配的第三部分將被認(rèn)為是最好的匹配,因?yàn)檩^大部分的輸入數(shù)據(jù)流在此步驟中通過(guò)這種判定而得到處理。如果兩個(gè)或多個(gè)第三部分與第二部分匹配的字符數(shù)目相同,則在最佳實(shí)施例中,最好的匹配是這樣的一個(gè)第三部分—即它在表示地址的字符方面有最小的地址。以此方式,輸出文件能夠被保持在盡可能地小。在這些表所示的例子中,第三部分的地址是以從歷史緩存器的開(kāi)始處的偏移來(lái)計(jì)算的。然而,應(yīng)該理解的是,在替換實(shí)施例中可以采用其他的尋址方案,諸如從歷史緩存器最接近先行緩存器的另一端來(lái)計(jì)算偏移。
當(dāng)以此方式找到了匹配時(shí),輸入數(shù)據(jù)流以與寫(xiě)入輸出文件的第二值相同的字符數(shù)目的增量—即第三和第二部分的匹配的長(zhǎng)度—的方式通過(guò)滑動(dòng)窗口。因此,相同字符數(shù)目的輸入數(shù)據(jù)流將在滑動(dòng)窗口的一端以增量的方式移出歷史緩存器,且相同字符數(shù)目的輸入數(shù)據(jù)流將在滑動(dòng)窗口的另一端以增量的形式進(jìn)入先行緩存器。對(duì)于上面給出的例子,第二值是3,因而在使數(shù)據(jù)流增量通過(guò)窗口之后,窗口將隨后保持如表4所示的數(shù)據(jù)流。
0000000001111111111212345678901234567890DEFGHIJKLMNOFGHOLABD歷史緩存器 ^ 先行緩存器表4.在20字符滑動(dòng)窗口中的輸入數(shù)據(jù)流駐留在窗口中的輸入數(shù)據(jù)流的這種增量部分,變成了正在處理的數(shù)據(jù)流的新的第一部分。先行緩存器中的數(shù)據(jù)流的新的第二部分從字母O開(kāi)始。偏移地址數(shù)保持了它們的位置,且在第二部分與起始或隨后的第三部分之間找到匹配的處理被重新開(kāi)始。在此例中,第二部分與歷史緩存器中從地址12開(kāi)始的第三部分相匹配,且持續(xù)了1字符的長(zhǎng)度。因此,為在表3和4中顯示的所找到的匹配而寫(xiě)入輸出文件的頭兩對(duì)如表5中所示。
6,3,12,1表5.輸出文件應(yīng)該理解的是,值寫(xiě)入輸出文件的順序可以是相反的,從而使該長(zhǎng)度可以是寫(xiě)入的第一個(gè)值且地址可以是寫(xiě)入的第二個(gè)值。寫(xiě)入輸出文件的值,諸如地址和長(zhǎng)度值,可以如表5所示地被寫(xiě)入輸出文件,但較好地是利用不同的方案寫(xiě)入,這些方案被用來(lái)減小輸出文件的大小。例如,可以使地址或長(zhǎng)度值記號(hào)化,而不是以實(shí)際值的形式寫(xiě)入。較好地,用戶(hù)可選擇一或兩種不同的輸出文件編碼方法,或者是靜態(tài)編碼法或者是動(dòng)態(tài)編碼法。
在靜態(tài)編碼法中,長(zhǎng)度和地址值之一或兩者可被映象到具體的固定位序列上。在該方法的最佳實(shí)施例中,只有長(zhǎng)度被如此記號(hào)化,且地址被寫(xiě)入一個(gè)固定長(zhǎng)度9位域。長(zhǎng)度值通過(guò)查詢(xún)一個(gè)預(yù)定表—它把長(zhǎng)度值與一個(gè)記號(hào)字符聯(lián)系起來(lái)—中的長(zhǎng)度值,而得到編碼。該記號(hào)字符的長(zhǎng)度最好比長(zhǎng)度值短,且較好地,最頻繁地出現(xiàn)的那些長(zhǎng)度值被分配了最短的記號(hào),從而使輸出文件能夠盡可能地小。如果沒(méi)有找到匹配,或者匹配長(zhǎng)度為一,則編碼給出一個(gè)二進(jìn)制0,隨后是非匹配的字節(jié)。對(duì)于8位字節(jié),這將是總共9個(gè)位。當(dāng)輸出文件被解碼時(shí),解碼器再次在整個(gè)預(yù)定表上運(yùn)行長(zhǎng)度記號(hào),并得到長(zhǎng)度值。
如果找到了大于1的匹配長(zhǎng)度,則在最佳實(shí)施例中采用了表6給出的記號(hào)表匹配長(zhǎng)度 長(zhǎng)度碼 位移碼2-3 10x 9位碼4-7 1110xx 9位碼8-15 1110xxx 9位碼16-31 11110xxxx9位碼32-27711111xxxxxxxx9位碼表6.靜態(tài)記號(hào)表該9位位移碼的計(jì)算最好如下temp=(先行緩存器中的第一個(gè)字節(jié)的地址)-(匹配-位置-地址)-1如果(temp<0)則(位移碼)=temp+796否則(位移碼)=temp其中地址是歷史緩存器的地址。
長(zhǎng)度編碼的X是用編碼范圍中的給定長(zhǎng)度的偏移來(lái)編碼的。例如,對(duì)于8-15的范圍,12的串長(zhǎng)度將被編碼為1110100,在該范圍中有偏移4。最后的記號(hào)是后面跟有該位移碼的長(zhǎng)度碼。當(dāng)壓縮器完成了壓縮循環(huán)時(shí),一個(gè)專(zhuān)用的文件結(jié)束記號(hào),較好地是11111111111,被寫(xiě)入輸出文件。這標(biāo)志了輸出文件的結(jié)束。
動(dòng)態(tài)編碼法的基本工作原理與靜態(tài)編碼法的相同,只是長(zhǎng)度值編碼所借助的表不是一個(gè)不隨著數(shù)據(jù)流的處理而改變的靜態(tài)預(yù)定表,而是一個(gè)動(dòng)態(tài)表—它根據(jù)正在處理的數(shù)據(jù)流的具體字符而改變。在此方法中,不同長(zhǎng)度值的出現(xiàn)頻率得到了監(jiān)測(cè),且當(dāng)給定的長(zhǎng)度值的頻率增大時(shí),它在表中被給予比出現(xiàn)頻率較小的長(zhǎng)度值的記號(hào)短的記號(hào)。較好地,一組預(yù)定的規(guī)則被用來(lái)進(jìn)行這些表分配判定,且規(guī)則組被提供給壓縮器和解壓縮設(shè)備,從而使解壓縮器可在壓縮器對(duì)輸出文件進(jìn)行寫(xiě)入的同時(shí)在輸出文件處理的同一點(diǎn)處進(jìn)行表的改變,且輸出文件將被解壓縮器完全重組成起始的數(shù)據(jù)流。通過(guò)采用動(dòng)態(tài)表,出現(xiàn)最頻繁的長(zhǎng)度值被給予了最短的記號(hào)值,即使在數(shù)據(jù)流壓縮過(guò)程中出現(xiàn)頻率發(fā)生改變的情況下也是如此。
例如,在最佳實(shí)施例中,第二種編碼方法在開(kāi)始時(shí)采用了上述的編碼方法來(lái)產(chǎn)生輸出記號(hào)。當(dāng)記號(hào)被產(chǎn)生時(shí),邏輯電路對(duì)產(chǎn)生了多少各個(gè)類(lèi)型的記號(hào)進(jìn)行跟蹤。如果一種給定記號(hào)類(lèi)型的頻率超過(guò)了以較少的長(zhǎng)度碼位編碼的記號(hào)類(lèi)型,則這種頻率較高的記號(hào)類(lèi)型將取采較少長(zhǎng)度碼位類(lèi)型的長(zhǎng)度碼。請(qǐng)考慮表7中給出的記號(hào)化表。
類(lèi)型匹配長(zhǎng)度長(zhǎng)度碼 位移碼A 2 100 9位碼B 3 101 9位碼C 4-7 1110xx 9位碼D 8-151110xxx 9位碼E 16-31 11110xxxx9位碼F 32-277 11111xxxxxxxx9位碼表7.起始配置中的動(dòng)態(tài)編碼表例如,如果在壓縮任務(wù)期間類(lèi)型E記號(hào)的數(shù)目超過(guò)了類(lèi)型D記號(hào)的數(shù)目,則將來(lái)的類(lèi)型E和D記號(hào)將如表8所示地得到編碼類(lèi)型 匹配長(zhǎng)度 長(zhǎng)度碼 位移碼D8-15 11110xxx9位碼E16-31 1110xxxx9位碼表8.重新配置之后的動(dòng)態(tài)編碼表以上已經(jīng)給出了可用的記號(hào)的具體實(shí)施例。然而,應(yīng)該理解的是這些記號(hào)只是最佳實(shí)施例中所可以采用的記號(hào)的例子。當(dāng)然,可以在采用的記號(hào)的更廣泛的概念內(nèi)采用其他的記號(hào),以對(duì)長(zhǎng)度數(shù)據(jù)和位移進(jìn)行編碼,以及一種動(dòng)態(tài)方案—其中編碼可在有利時(shí)得到改變。
在最佳實(shí)施例中,壓縮方法是以同時(shí)發(fā)生的方式運(yùn)行的,從而在同時(shí)進(jìn)行該方法的幾個(gè)不同步驟。例如,通過(guò)提供一個(gè)以上的比較器以比較第三和第二部分,可以一次比較一個(gè)以上的第三部分,且可以更迅速地發(fā)現(xiàn)匹配。在最佳實(shí)施例中,采用了四個(gè)比較器。
如果在先行緩存器中沒(méi)有與第二部分匹配的第三部分,則數(shù)據(jù)流以增量的形式通過(guò)窗口一定數(shù)目的字符。這些以增量的形式從先行緩存器進(jìn)入歷史緩存器的字符被寫(xiě)入輸出文件,且重復(fù)試圖把新的第二部分與起始或隨后的第三部分進(jìn)行匹配的處理。在最佳實(shí)施例中,數(shù)據(jù)流是以單個(gè)字符的方式增量的,因而單個(gè)的字符被如上所述地寫(xiě)入輸出文件,并以增量的形式從先行緩存器進(jìn)入歷史緩存器。
如上所述,該壓縮設(shè)備可通過(guò)采用與串行步進(jìn)通過(guò)歷史緩存器不同的方法而迅速地在數(shù)據(jù)流上進(jìn)行操作,從而找到數(shù)據(jù)流的候選第三部分。較好地,具有兩個(gè)陣列的一種設(shè)備被用來(lái)更迅速地識(shí)別歷史緩存器中可能是與先行緩存器中的第二部分匹配的候選者的第三部分。這兩個(gè)陣列被指定為指針陣列和記錄陣列。
作為概述,當(dāng)把數(shù)據(jù)流的第一部分讀入窗口時(shí),數(shù)據(jù)流的第四部分被用來(lái)產(chǎn)生一個(gè)指標(biāo),該指標(biāo)被用來(lái)選擇指針陣列中的一個(gè)登記項(xiàng)。指針陣列中的該登記項(xiàng)隨后被用來(lái)選擇記錄陣列中的一個(gè)初始登記項(xiàng)。記錄陣列中的該初始登記項(xiàng)包含歷史緩存器中可能與數(shù)據(jù)流的第二部分匹配的數(shù)據(jù)流起始第三部分的地址。記錄陣列中的初始登記項(xiàng)還具有記錄陣列地址—它指向記錄陣列中的隨后的登記項(xiàng),該隨后的登記項(xiàng)也包含可能是與數(shù)據(jù)流的第二部分匹配的候選者的數(shù)據(jù)流的隨后第三部分的歷史緩存器地址。如果初始登記項(xiàng)引用的第三部分沒(méi)有提供與第二部分的適當(dāng)匹配,或者如果希望比較更多的第三部分,則隨后的登記項(xiàng)將得到采用。以此方式,提供了更為有效和明確的可能匹配定位方法。
訪問(wèn)的隨后記錄陣列登記項(xiàng)的數(shù)目取決于幾種標(biāo)準(zhǔn)的平衡。例如,如果到達(dá)了記錄陣列的結(jié)束,則選擇隨后的記錄陣列登記項(xiàng)的處理可能停止。另外,如果記錄陣列登記項(xiàng)中的歷史緩存器地址指向與第二部分匹配的第三部分,且匹配的長(zhǎng)度等于或大于一個(gè)預(yù)定值,則隨后的記錄陣列登記項(xiàng)可以不被調(diào)查。進(jìn)一步地,只需要調(diào)查預(yù)定數(shù)目的記錄陣列登記項(xiàng),且在此點(diǎn)被發(fā)現(xiàn)匹配并具有最大匹配長(zhǎng)度的任何一個(gè)第三部分都被用作匹配的第三部分。以此方式,較好的設(shè)備保證了不把太多的時(shí)間用在尋找匹配的第三部分上。
為了使指針陣列和記錄陣列有用,它們必須被裝載上數(shù)據(jù)并隨后在壓縮設(shè)備的操作期間得到保持。在圖3中給出了這種處理的一個(gè)概述。為了裝載陣列,數(shù)據(jù)流以增量的方式一次一個(gè)字節(jié)地被讀入窗口,直到第一填充的先行緩存器滿(mǎn)了,且在歷史緩存器中有該數(shù)據(jù)流的一個(gè)字節(jié)。在此,數(shù)據(jù)流的第五部分—它在最佳實(shí)施例中是剛移入歷史緩存器中的字節(jié)的低4位和先行緩存器的第一字節(jié)(它是將要以增量的方式進(jìn)入歷史緩存器的下一個(gè)字節(jié))的低4位被連接起來(lái)。新形成的8位字節(jié)是用來(lái)查詢(xún)指針陣列中的一個(gè)登記項(xiàng)的指針。因此,指針陣列的大小與用來(lái)形成指針的位的數(shù)目之間有一種關(guān)系。數(shù)字信息的八位有256個(gè)唯一的值,這是指針陣列的大小。因此,在替換實(shí)施例中,可選擇其他的指針陣列大小,而適當(dāng)?shù)牟煌瑪?shù)目的位被用于產(chǎn)生指針。
在最佳實(shí)施例中,記錄陣列有512個(gè)登記項(xiàng)的長(zhǎng)度。因此,需要9位來(lái)指向記錄陣列中的登記項(xiàng)。如上所述,歷史緩存器較好地也具有512字節(jié)的大小,因而尋址歷史緩存器中的所有字節(jié)也需要9位。也可以選擇其他值的記錄陣列和歷史緩存器的大小,它們需要相應(yīng)的不同數(shù)目的地址位來(lái)完成對(duì)它們的尋址。
指針?biāo)玫闹羔橁嚵械牡怯涰?xiàng)被讀出和暫時(shí)保存,且其在指針陣列中的位置借助記錄陣列中的下一個(gè)可用登記項(xiàng)的地址而得到復(fù)寫(xiě)。對(duì)于第一個(gè)循環(huán),它是記錄陣列的第一登記項(xiàng),對(duì)于第二個(gè)循環(huán)它是第二登記項(xiàng),等等。下一個(gè)可用的記錄地址最好是以9位計(jì)數(shù)器來(lái)實(shí)施,并在壓縮設(shè)備啟動(dòng)時(shí)被初始化至零。記錄陣列中的缺省啟動(dòng)值表明了無(wú)效的記錄登記項(xiàng),因?yàn)樵谄鹗紗?dòng)或復(fù)置之后所有的登記項(xiàng)都是無(wú)效的。從暫時(shí)保存的指針陣列來(lái)的登記項(xiàng)與歷史緩存器中的第一個(gè)字節(jié)以及包含在歷史緩存器的第一個(gè)地址中的字節(jié)的當(dāng)前地址連接起來(lái),并被寫(xiě)入被寫(xiě)入上述指針陣列的記錄陣列中的下一個(gè)可用的登記項(xiàng)的地址所引用。對(duì)連接的記錄陣列登記項(xiàng)的最佳實(shí)施例的描述在圖2中給出。
在此,記錄陣列的下一個(gè)可用的登記項(xiàng)的值被加1,且數(shù)據(jù)流的下一個(gè)字節(jié)從先行緩存器以增量的形式進(jìn)入歷史緩存器,且把8位指標(biāo)形成指針陣列并裝載該指針陣列和記錄陣列的處理得到循環(huán)重復(fù)。這種處理較好地是被用來(lái)在數(shù)據(jù)流以增量的方式通過(guò)窗口時(shí)對(duì)指針陣列和記錄陣列進(jìn)行更新,并在每一個(gè)字節(jié)的數(shù)據(jù)流以增量的方式從先行緩存器進(jìn)入歷史緩存器時(shí)得到執(zhí)行。
在最佳實(shí)施例中,以此裝載和更新指針陣列和記錄陣列的目的是使它們能夠被用來(lái)為先行緩存器中的數(shù)據(jù)流的第二部分與歷史緩存器中的數(shù)據(jù)流的第三部分之間的匹配提供可能的候選者。因此,每當(dāng)數(shù)據(jù)流以增量—在未發(fā)現(xiàn)匹配的情況下該增量是一個(gè)字節(jié)或者該增量是前面的匹配長(zhǎng)度的字節(jié)數(shù)目—的方式通過(guò)窗口時(shí),較好地是采用找到可能的第三部分候選者的方法。在圖4中給出了使用該指針陣列和記錄陣列的較好方法的流程圖。
首先,來(lái)自數(shù)據(jù)流的第四部分—較好地是先行緩存器中的頭兩個(gè)字節(jié)(它們是將要以增量的方式進(jìn)入歷史緩存器的下兩個(gè)字節(jié))的各個(gè)字節(jié)的低4位被連接成一個(gè)8位指標(biāo),且該指標(biāo)被用來(lái)引用指針陣列中的一個(gè)登記項(xiàng)。雖然可以采用來(lái)自這兩個(gè)字節(jié)的每一個(gè)的不同數(shù)目的位數(shù),且可以采用不同數(shù)目的字節(jié),但采用最佳實(shí)施例中的這種方法是有利的。當(dāng)借助運(yùn)行段長(zhǎng)度編碼進(jìn)行處理時(shí),很多數(shù)據(jù)流將產(chǎn)生不超過(guò)16的值。這意味著通常一個(gè)數(shù)據(jù)流沒(méi)有長(zhǎng)度超過(guò)16個(gè)字符的0或1的運(yùn)行段。因此,來(lái)自運(yùn)行段長(zhǎng)度編碼器的多數(shù)的區(qū)分信息將被包含在字節(jié)的低4位中。因此,這些是被用來(lái)裝載指針陣列的位,并產(chǎn)生了用于讀取指針陣列的指標(biāo)。在一個(gè)替換實(shí)施例中,可采用來(lái)自各個(gè)字節(jié)的五個(gè)位。在此實(shí)施例中,指針陣列的大小較好地是1024個(gè)登記項(xiàng),這是10個(gè)位所能夠存取的登記項(xiàng)的數(shù)目。
指針陣列中被該指標(biāo)所引用的登記項(xiàng)被讀出并受到有效性檢查。無(wú)效的指針陣列登記項(xiàng)是包含當(dāng)壓縮方法被啟動(dòng)或復(fù)置時(shí)被寫(xiě)入指針陣列的缺省值的登記項(xiàng)。如果該指針陣列登記項(xiàng)包含一個(gè)無(wú)效值,則不存在第三部分匹配候選者,且壓縮程序把先行緩存器中的第一字節(jié)寫(xiě)入輸出文件,使數(shù)據(jù)流以一個(gè)字節(jié)的增量通過(guò)窗口,并產(chǎn)生一個(gè)新的指標(biāo)。
如果被指標(biāo)引用的指針陣列中的登記項(xiàng)是有效的,則它是記錄陣列中的一個(gè)地址,且它是根據(jù)指針陣列中的登記項(xiàng)而選擇的。這是起始記錄陣列登記項(xiàng)。記錄陣列中選定的登記項(xiàng)包含一個(gè)歷史緩存器地址、另一記錄陣列地址、以及前面從歷史緩存器讀出的一個(gè)字節(jié)的連合,如上所述。來(lái)自歷史緩存器的字節(jié)起著有效檢查的作用。如果該字節(jié)不與先行緩存器的第一個(gè)字節(jié)匹配,則記錄陣列登記項(xiàng)是無(wú)效的,這表明沒(méi)有更多的第三部分候選者需要進(jìn)行匹配檢查。
如果起始記錄陣列登記項(xiàng)是有效的,則在此登記項(xiàng)中的歷史緩存器地址引用歷史緩存器中的一個(gè)候選者第三部分。該地址被傳送到一個(gè)比較器單元,該單元查詢(xún)歷史緩存器中的第三部分,并將其與先行緩存器中的第二部分進(jìn)行匹配比較。如果發(fā)現(xiàn)了匹配,則該匹配的長(zhǎng)度也由該比較器單元確定。
該起始記錄陣列登記項(xiàng)還包含至記錄陣列中的隨后的登記項(xiàng)的地址。該隨后的登記項(xiàng)也受到有效性檢查,且如果有效,該歷史緩存器中由該隨后的登記項(xiàng)的歷史緩存器地址所引用的歷史緩存器中的隨后的第三部分,也由比較器進(jìn)行與第二部分的匹配的檢查。這種隨后的登記項(xiàng)可隨后被指定為初始登記項(xiàng),且在記錄陣列中發(fā)現(xiàn)更多隨后的登記項(xiàng)的處理繼續(xù)進(jìn)行。這種發(fā)現(xiàn)額外的登記項(xiàng)并把歷史緩存器中的額外第三部分與先行緩存器中的第二部分相比較的處理被繼續(xù)進(jìn)行,直到幾個(gè)較好的標(biāo)準(zhǔn)中的至少一個(gè)得到滿(mǎn)足。這些標(biāo)準(zhǔn)較好地是如上所述記錄陣列中沒(méi)有更多的有效登記項(xiàng),已經(jīng)發(fā)現(xiàn)了適當(dāng)?shù)钠ヅ洌蛘咭呀?jīng)識(shí)別了記錄陣列中的預(yù)定數(shù)目的登記項(xiàng)且它們的相關(guān)歷史緩存器地址已經(jīng)被傳送到了比較器單元。在此,或者沒(méi)有發(fā)現(xiàn)匹配,或者采用在此點(diǎn)所發(fā)現(xiàn)的最好的匹配,且壓縮方法如上所述地繼續(xù)進(jìn)行。
當(dāng)所有輸入的數(shù)據(jù)流都以增量的方式通過(guò)了窗口時(shí),數(shù)據(jù)流的壓縮結(jié)束。應(yīng)該理解的是,先行緩存器或歷史緩存器的充滿(mǎn)并不是設(shè)備運(yùn)行所必需的,而設(shè)備將識(shí)別緩存器包含有效信息的那些部分。這在例如文件的大小被壓縮成了小于先行緩存器或歷史緩存器的大小時(shí)是重要的。輸出文件—它可如上所述地被記號(hào)化—可被一個(gè)解壓縮器所解壓縮,而該解壓縮器采用與上述選定壓縮程序相反的順序?qū)敵鑫募M(jìn)行操作。
雖然已經(jīng)對(duì)本發(fā)明的具體實(shí)施例進(jìn)行了以上的具體描述,應(yīng)該理解的是本發(fā)明也同樣可應(yīng)用于本領(lǐng)域的技術(shù)人員眾所周知的不同的應(yīng)用。
權(quán)利要求
1.一種用于壓縮數(shù)據(jù)流的方法,包括a.把數(shù)據(jù)流的一個(gè)第一部分讀入一個(gè)窗口,該窗口具有一個(gè)歷史緩存器和一個(gè)先行緩存器,b.選擇一個(gè)從先行緩存器中的數(shù)據(jù)流的一個(gè)第四部分取得的指標(biāo),c.根據(jù)該指標(biāo)選擇一個(gè)指針陣列中的一個(gè)登記項(xiàng),d.根據(jù)該指針陣列登記項(xiàng)選擇一個(gè)記錄陣列中的一個(gè)初始登記項(xiàng),該記錄陣列初始登記項(xiàng)具有一個(gè)歷史緩存器地址和一個(gè)記錄陣列地址,e.選擇從被初始登記項(xiàng)的歷史緩存器地址所引用的歷史緩存器中的一個(gè)地址開(kāi)始的數(shù)據(jù)流的一個(gè)第三部分,f.把數(shù)據(jù)流的該第三部分與先行緩存器中的數(shù)據(jù)流的一個(gè)第二部分進(jìn)行比較,g.如果數(shù)據(jù)流的該第三部分不與數(shù)據(jù)流的第二部分相匹配,則根據(jù)初始登記項(xiàng)的記錄陣列地址選擇記錄陣列中的一個(gè)隨后的登記項(xiàng),該隨后的登記項(xiàng)隨后被指定為初始登記項(xiàng),h.重復(fù)步驟e.至g.,直到數(shù)據(jù)流的第三部分與數(shù)據(jù)流的第二部分相匹配或者在記錄陣列中不再有登記項(xiàng),i.如果記錄陣列中不再有剩下的登記項(xiàng),則把數(shù)據(jù)流的該第二部分寫(xiě)入輸出文件,并使讀入到窗口的數(shù)據(jù)流的第一部分有一個(gè)預(yù)定量的增量,且ii.如果數(shù)據(jù)流的該第三部分與數(shù)據(jù)流的該第二部分匹配,則把數(shù)據(jù)流的該第三部分的歷史緩存器地址以及表示數(shù)據(jù)流的該第三部分和數(shù)據(jù)流的該第二部分有多少字節(jié)匹配的一個(gè)長(zhǎng)度值輸出到輸出文件,并使讀入到窗口的數(shù)據(jù)流的第一部分增加匹配的字節(jié)數(shù),以及i.重復(fù)從步驟b.開(kāi)始的方法,直到所有數(shù)據(jù)流都已經(jīng)被讀入窗口中。
2.用于壓縮一種初始數(shù)據(jù)流的設(shè)備,包括a.一個(gè)位運(yùn)行段長(zhǎng)度預(yù)處理器,用于借助運(yùn)行段長(zhǎng)度編碼來(lái)有選擇地壓縮初始數(shù)據(jù)流中相繼運(yùn)行的0和1并產(chǎn)生一個(gè)預(yù)處理過(guò)的數(shù)據(jù)流,b.一種滑動(dòng)窗口壓縮器,用于有選擇地讀取初始和預(yù)處理數(shù)據(jù)流之一的一個(gè)第一部分,該滑動(dòng)窗口壓縮器包括一個(gè)具有地址和512字節(jié)大小的歷史緩存器以及一個(gè)具有地址和277字節(jié)大小的先行緩存器,c.具有帶有地址的登記項(xiàng)和先行緩存器中的數(shù)據(jù)流的第一個(gè)字節(jié)的一個(gè)記錄陣列,至少一部分登記項(xiàng)包含其他記錄陣列登記項(xiàng)的地址以及一個(gè)歷史緩存器地址中,d.一個(gè)指針陣列,它具有帶有地址的登記項(xiàng),至少一部分登記項(xiàng)包含記錄陣列中的登記項(xiàng)之一的地址,e.用于從先行緩存器中的數(shù)據(jù)流的第一字節(jié)的一部分和一個(gè)第二字節(jié)的一部分產(chǎn)生一個(gè)指標(biāo)的裝置,f.用于選擇并讀取具有與指標(biāo)相應(yīng)的地址的指針陣列中的登記項(xiàng)的裝置,g.用于確認(rèn)選定的指針陣列登記項(xiàng)的裝置,一個(gè)無(wú)效的指針陣列登記項(xiàng)是不包含記錄陣列中的一個(gè)登記項(xiàng)的地址的指針陣列登記項(xiàng),h.用于選擇和讀取具有與從指針陣列的有效登記項(xiàng)讀取的地址相應(yīng)的地址的記錄陣列中的一個(gè)初始登記項(xiàng)的裝置,i.用于確認(rèn)選定的記錄陣列初始登記項(xiàng)的裝置,一個(gè)無(wú)效的記錄陣列初始登記項(xiàng)是不包含先行緩存器中的數(shù)據(jù)流的第一個(gè)字節(jié)的記錄陣列初始登記項(xiàng),j.用于選擇從包含在確認(rèn)的記錄陣列初始登記項(xiàng)中的歷史緩存器的地址開(kāi)始的數(shù)據(jù)流的一個(gè)第三部分的裝置,k.比較器單元,用于把數(shù)據(jù)流的該第三部分與數(shù)據(jù)流從先行緩存器中的第一個(gè)字節(jié)開(kāi)始的一個(gè)第二部分相比較,并判定該第三部分是否與該第二部分相匹配,并用于進(jìn)一步確定第三部分與第二部分的匹配長(zhǎng)度—該匹配長(zhǎng)度是用字節(jié)數(shù)表示的,l.用于根據(jù)包含在初始登記項(xiàng)中的記錄陣列地址選擇記錄陣列中的一個(gè)隨后的登記項(xiàng)的裝置,該隨后的登記項(xiàng)隨后被指定為初始登記項(xiàng),m.用于重復(fù)操作部件j至l直到包括第三部分與第二部分相匹配的字節(jié)數(shù)至少等于一個(gè)預(yù)定值、在記錄陣列中不再有登記項(xiàng)、以及已經(jīng)調(diào)查了至少預(yù)定數(shù)目的記錄陣列登記項(xiàng)的至少一個(gè)條件得到滿(mǎn)足的裝置,n.用于選擇根據(jù)包括第三部分的長(zhǎng)度和地址的標(biāo)準(zhǔn)確定的與第二部分匹配得最好的第三部分的裝置,o.用于把選定的第三部分的長(zhǎng)度和歷史緩存器地址輸出到一個(gè)輸出文件的裝置,p.用于有選擇地利用一個(gè)靜態(tài)表和一個(gè)動(dòng)態(tài)表中的一個(gè)來(lái)使至輸出文件的長(zhǎng)度輸出記號(hào)化的裝置,q.用于根據(jù)不隨著數(shù)據(jù)流中的不同而改變的該靜態(tài)表的預(yù)定順序來(lái)使該長(zhǎng)度記號(hào)化的靜態(tài)表,r.用于按照根據(jù)數(shù)據(jù)流中的不同而改變動(dòng)態(tài)表的預(yù)定順序的規(guī)則來(lái)使該長(zhǎng)度記號(hào)化的動(dòng)態(tài)表,s.用于把讀入窗口的數(shù)據(jù)流的第一部分增加一定字節(jié)數(shù)目直到所有數(shù)據(jù)流都得到壓縮的裝置,該字節(jié)數(shù)目在發(fā)現(xiàn)了匹配的情況下是由長(zhǎng)度確定的,且該字節(jié)數(shù)目在沒(méi)有發(fā)現(xiàn)匹配的情況下是1,以及t.用于把一個(gè)值1111111111111寫(xiě)入輸出文件的裝置。
全文摘要
用于壓縮數(shù)據(jù)流的方法,其中數(shù)據(jù)流的一個(gè)第一部分被讀入一個(gè)窗口,該窗口有一個(gè)歷史緩存器和先行緩存器。從先行緩存器中的數(shù)據(jù)流的一個(gè)第四部分選擇一個(gè)指標(biāo),且根據(jù)該指標(biāo),選擇一個(gè)指針陣列中的一個(gè)登記項(xiàng)。根據(jù)該指針陣列登記項(xiàng)選出一個(gè)記錄陣列中的一個(gè)初始登記項(xiàng)。該記錄陣列初始登記項(xiàng)具有一個(gè)歷史緩存器地址和記錄陣列地址。數(shù)據(jù)流的一個(gè)第三部分得到選擇,它從初始登記項(xiàng)的歷史緩存器地址所引用的歷史緩存器中的一個(gè)地址開(kāi)始。
文檔編號(hào)H03M7/40GK1200604SQ9810831
公開(kāi)日1998年12月2日 申請(qǐng)日期1998年5月12日 優(yōu)先權(quán)日1997年5月12日
發(fā)明者克萊格·埃里克·哈達(dá)迪 申請(qǐng)人:萊克斯馬克國(guó)際公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1