專利名稱:數(shù)據(jù)壓縮的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及數(shù)據(jù)壓縮領(lǐng)域,尤其涉及用于數(shù)據(jù)壓縮的系統(tǒng)、服務器、方法和計算機可讀媒質(zhì)。
背景技術(shù):
用戶能夠以日益增長的各種方式訪問越來越多的數(shù)據(jù)。例如,用戶可訪問網(wǎng)站,并接收音樂會事件的廣播,即網(wǎng)播(webcast)。另外,用戶可使用無線電話通過無線網(wǎng)絡訪問游戲和其它應用程序。為向用戶提供這一數(shù)據(jù),數(shù)據(jù)可通過網(wǎng)絡從服務器流向客戶機以供客戶機呈現(xiàn)。用戶然后可與所呈現(xiàn)的數(shù)據(jù)交互,如通過觀看影片、聽歌曲等等。
流傳送數(shù)據(jù)向用戶提供了增加的功能,使得用戶可快速地接收數(shù)據(jù)。如果沒有流傳送,如果需要在由客戶機輸出之前從服務器接收所有的數(shù)據(jù)量,則用戶會在客戶機上呈現(xiàn)數(shù)據(jù)時經(jīng)受延遲。通過流傳送數(shù)據(jù),可減少用戶所遇到的延遲。數(shù)據(jù)流傳送可用于提供數(shù)據(jù)的“實時”呈現(xiàn)。
為流傳送數(shù)據(jù),一般使用分組以流傳送或連續(xù)的方式將數(shù)據(jù)從服務器發(fā)送,以當數(shù)據(jù)到達時在客戶機上呈現(xiàn),這與在包括數(shù)據(jù)的整個文件在客戶機上可用之前不呈現(xiàn)數(shù)據(jù)相反。流傳送可用于各種類型的數(shù)據(jù),如視頻數(shù)據(jù)、音頻數(shù)據(jù)、媒體數(shù)據(jù)等等。視頻數(shù)據(jù)流提供了“移動圖像”的序列,這些圖像被發(fā)送,并在到達時被呈現(xiàn)。類似地,音頻數(shù)據(jù)流提供了當音頻數(shù)據(jù)到達時播放的聲音數(shù)據(jù)。媒體數(shù)據(jù)流包括音頻和視頻數(shù)據(jù)兩者。
可壓縮流傳送數(shù)據(jù)以有效地將數(shù)據(jù)通過網(wǎng)絡從服務器流到客戶機,并提高流數(shù)據(jù)的效用。例如,通信上將服務器耦合至客戶機的網(wǎng)絡可具有有限的帶寬。有限帶寬會限制在任何一個時刻從服務器傳遞到客戶機的數(shù)據(jù)量,并因此限制了在通過網(wǎng)絡流傳送數(shù)據(jù)時向客戶機提供的功能。例如,由于有限的帶寬,流傳送的視頻數(shù)據(jù)可被限制到較低的分辨率,而如果使用了更高帶寬的網(wǎng)絡,情況則相反。因此,期望較高分辨率流視頻數(shù)據(jù)的用戶可能被強迫購買較高帶寬的連接。通過壓縮流數(shù)據(jù),可在任何一個時刻通過低帶寬網(wǎng)絡傳輸更多的數(shù)據(jù),并因此提高流數(shù)據(jù)的效用。
然而,當壓縮數(shù)據(jù)時,會遇到另外的問題,這與壓縮整個數(shù)據(jù)集相反,如塊壓縮。例如,為一次壓縮整個影片,壓縮例程可檢查構(gòu)成該影片的整個數(shù)據(jù)量,以壓縮數(shù)據(jù)。壓縮例程可提供遍及構(gòu)成該影片的數(shù)據(jù)所包括的常見序列的表示。然而,可提供流數(shù)據(jù)用于數(shù)據(jù)的“實時”呈現(xiàn)。因此,可能有有限量的時間來分析流數(shù)據(jù),以提供客戶機對數(shù)據(jù)的實時呈現(xiàn)。另外,在任何一個時候可能有有限量的數(shù)據(jù)可用于壓縮以提供公共序列的表示。
因此,對數(shù)據(jù)壓縮有不斷的需求。
發(fā)明內(nèi)容
描述了數(shù)據(jù)壓縮。在一個示例性實施例中,壓縮模塊由服務器執(zhí)行,以壓縮流到客戶機的數(shù)據(jù),如響應于來自客戶機的遠程訪問請求而發(fā)送的數(shù)據(jù)、終端服務環(huán)境中的數(shù)據(jù)等等。壓縮模塊采用包括先前流到客戶機的數(shù)據(jù)的歷史緩沖區(qū)。當被執(zhí)行時,壓縮模塊將要流傳送的數(shù)據(jù)中的序列與歷史緩沖區(qū)中的一個或多個序列相比較,以找出匹配的序列。為在歷史緩沖區(qū)中定位序列,采用了具有多個條目的查找表,每一個條目都可由多個索引之一發(fā)現(xiàn)。每一條目涉及歷史緩沖區(qū)中是否有對應的索引,如果有,則還引用歷史緩沖區(qū)中該對應索引的一個或多個位置。因此,壓縮模塊可使用要流傳送的數(shù)據(jù)中的一初始序列作為查找表中的索引,以找出歷史緩沖區(qū)中的匹配索引。數(shù)據(jù)中的該匹配序列然后可用描述歷史緩沖區(qū)的匹配序列的位置和長度的表示來替換,以形成流到客戶機的經(jīng)壓縮的數(shù)據(jù)。
在另一實現(xiàn)中,一種方法包括接收指示用于通過網(wǎng)絡將數(shù)據(jù)從服務器提供的終端服務傳遞到客戶機的資源的可用性的反饋,以及響應于該反饋調(diào)整用于壓縮數(shù)據(jù)的壓縮例程的一個或多個參數(shù)。
在另外一個實現(xiàn)中,一種方法包括在服務器處從客戶機接收對通過服務器遠程訪問可用應用程序或文件的請求。確定用于響應于該請求通過網(wǎng)絡傳遞數(shù)據(jù)的資源的可用性?;诖_定的可用性調(diào)整用于壓縮數(shù)據(jù)的壓縮例程的一個或多個參數(shù)。
圖1是示出數(shù)據(jù)通過網(wǎng)絡從服務器流到客戶機的環(huán)境的一個示例性實現(xiàn)的說明。
圖2是更詳細地示出圖1的服務器和客戶機的示例性實現(xiàn)的說明。
圖3是描述配置用于流傳送數(shù)據(jù)供壓縮的示例性過程的流程圖。
圖4是描述一個示例性過程的流程圖,其中,被配置成包括對要流傳送的分組的引用的圖3的查找表用于壓縮分組。
圖5是描述一個示例性過程的流程圖,其中,圖4的已壓縮分組由客戶機通過執(zhí)行一解壓模塊來解壓。
圖6是一個示例性實現(xiàn)的說明,其中,在歷史緩沖區(qū)中使用一滑動窗以包括要流傳送的數(shù)據(jù)。
圖7是描述其中進一步優(yōu)化流數(shù)據(jù)的壓縮的一個示例性實現(xiàn)的過程的流程圖。
圖8是一個示例性實現(xiàn)的說明,其中,優(yōu)化序列的壓縮以進一步優(yōu)化數(shù)據(jù)壓縮。
圖9是一個示例性實現(xiàn)的系統(tǒng)的說明,其中,響應于從系統(tǒng)接收的返回動態(tài)地調(diào)整壓縮。
在所討論的實例中,相同的標號用于參照相同的結(jié)構(gòu)和組件。
具體實施例方式
綜述描述了數(shù)據(jù)壓縮。在一個示例性實現(xiàn)中,由服務器執(zhí)行一壓縮模塊,以壓縮用于從服務器流到客戶機的數(shù)據(jù)。該壓縮模塊采用一包括先前流到客戶機的數(shù)據(jù)的歷史緩沖區(qū)。當被執(zhí)行時,該壓縮模塊將要流傳送的數(shù)據(jù)中的序列與歷史緩沖區(qū)中的一個或多個序列進行比較,以找出匹配序列。為在歷史緩沖區(qū)中定位序列,采用一具有多個條目的查找表。每一條目可使用多個索引中的特定一個來發(fā)現(xiàn)。每一條目涉及對應的索引是否位于歷史緩沖區(qū)中,并且如果是,則還引用對應索引在歷史緩沖區(qū)中的一個或多個位置。因此,壓縮模塊可使用要流傳送的數(shù)據(jù)中的一初始序列,作為查找表中的索引以找出條目。以這一方式,壓縮模塊可快速地定位具有初始序列的歷史緩沖區(qū)中的每一位置,而無需為要流傳送的數(shù)據(jù)中的每一序列單獨比較歷史緩沖區(qū)中的每一序列。
如果匹配索引的對應條目引用了多個位置,則壓縮模塊通過將每一位置上具有匹配索引的序列與包括初始序列的數(shù)據(jù)中的序列進行比較,來導出匹配序列。數(shù)據(jù)中的該匹配序列然后可用描述歷史緩沖區(qū)中匹配序列的位置和長度的表示來表示。然后可形成包括該表示的已壓縮數(shù)據(jù)。已壓縮數(shù)據(jù)然后流到客戶機??蛻魴C通過使用同樣包括先前從服務器流到客戶機的數(shù)據(jù)的歷史緩沖區(qū)來解壓已壓縮數(shù)據(jù)。客戶機通過執(zhí)行解壓模塊,使用由該表示指示的長度和位置找出客戶機歷史緩沖區(qū)中的匹配序列,以重建該數(shù)據(jù)。以這一方式,提供了一種無損數(shù)據(jù)壓縮技術(shù),使得可在沒有丟失數(shù)據(jù)的情況下壓縮和解壓數(shù)據(jù)。例如,可使用該數(shù)據(jù)壓縮技術(shù)壓縮和解壓視頻數(shù)據(jù),而不會丟失數(shù)據(jù)部分,由此保留了視頻數(shù)據(jù)的分辨率。
示例性環(huán)境圖1是示出其中數(shù)據(jù)通過網(wǎng)絡106從服務器102流到客戶機104的環(huán)境100的示例性實現(xiàn)的說明。客戶機104可用各種方法來配置。例如,客戶機104可被配置為能夠通過網(wǎng)絡通信的設備,如所示的臺式機、移動站、娛樂設施、機頂盒、無線電話等等。客戶機104也可涉及操作客戶機104的個人和/或?qū)嶓w。換言之,客戶機104可描述包括用戶和/或機器的邏輯客戶機。盡管示出了一個客戶機104,然而多個客戶機可通信上耦合至網(wǎng)絡106。網(wǎng)絡106被示出為因特網(wǎng),并也可包括各種其它網(wǎng)絡,如內(nèi)聯(lián)網(wǎng)、有線或無線電話網(wǎng)絡等等。
服務器102被配置成通過網(wǎng)絡106將數(shù)據(jù)流到客戶機104。服務器102可提供各種流數(shù)據(jù),以供客戶機104呈現(xiàn)。在一個實現(xiàn)中,服務器102可提供流到客戶機104的音樂會的網(wǎng)播。當由客戶機104呈現(xiàn)時,用戶可觀看并傾聽網(wǎng)播。在另一實現(xiàn)中,客戶機104可接收包括從服務器102流出的歌曲的數(shù)據(jù),以供客戶機104輸出。
在另外一個實現(xiàn)中,服務器102也可提供用于遠程應用程序執(zhí)行的終端服務。例如,服務器102可包括多個應用程序108(1)、……、108(n)、……、108(N),其中,“n”可以是從2到“N”的任何整數(shù)。應用程序108(1)-108(N)中的每一個在服務器102上執(zhí)行。服務器102通過網(wǎng)絡106將屏幕信息流到客戶機104,該屏幕信息是通過執(zhí)行應用程序108(1)-108(N)來提供的。例如,屏幕信息可包括由操作系統(tǒng)提供的桌面和顯示涉及文字處理程序的執(zhí)行的信息的窗口的顯示,以及由操作系統(tǒng)和/或文字處理程序提供的音頻信息。
從服務器102流出的屏幕信息由客戶機104呈現(xiàn),以供用戶觀看。用戶可與客戶機104交互,以使用客戶機104的輸入設備,如鼠標108和/或鍵盤110來提供輸入。輸入可對應于呈現(xiàn)的屏幕信息,如通過使用鍵盤110提供的用于文字處理程序的文本輸入。輸入通過網(wǎng)絡106從客戶機104傳遞到服務器102。當由服務器102接收時,輸入可在執(zhí)行多個應用程序108(1)-108(N)時使用。例如,文字處理程序可接收用于包括在文檔中的文本輸入,并將屏幕信息流到客戶機104以說明該文檔具有包括的文本。通過執(zhí)行服務器102上的應用程序108(1)-108(N)并將屏幕信息流到客戶機104,客戶機104可訪問客戶機104自身上以其它方式可能不可用的功能。
例如,客戶機104可被配置成“瘦”客戶機,如具有有限的處理和/或存儲器資源。然而,服務器102可以是特征豐富的,如通過具有比客戶機104更多的處理和/或存儲器資源量。因此,服務器102可執(zhí)行客戶機104無法執(zhí)行和/或由客戶機104以較慢的方式執(zhí)行的應用程序。服務器102通過向客戶機104發(fā)送屏幕信息來向客戶機104提供一個或多個應用程序108(1)-108(N)的執(zhí)行結(jié)果,并通過網(wǎng)絡106從客戶機104接收輸入。以這一方式,由服務器102提供的功能,如處理資源、存儲器資源和多個應用程序108(1)-108(N)可被提供給否則將會無法訪問該功能的客戶機104。
為提供服務器102和客戶機104之間通過網(wǎng)絡的通信,服務器102和客戶機104分別實現(xiàn)遠程桌面協(xié)議(RDP)112、114。RDP 112、114被設計成如上所述地通過網(wǎng)絡連接向應用程序108(1)-108(N)提供遠程顯示和輸入能力。例如,RDP可用于允許攜帶從服務器102到客戶機104的設備通信和呈現(xiàn)數(shù)據(jù)的單獨的虛擬信道,以及從客戶機104傳遞到服務器102的經(jīng)加密的輸入。
RDP 112、114可也通過在服務器102和客戶機104上分別包括壓縮和解壓模塊116、118來提供帶寬的減少。壓縮模塊116可由服務器102通過實現(xiàn)RDP 112來執(zhí)行,以在數(shù)據(jù)通過網(wǎng)絡106流傳送之前壓縮它。類似地,解壓模塊可由客戶機104通過實現(xiàn)RDP 114來執(zhí)行,以解壓通過網(wǎng)絡106從服務器102流出的已壓縮數(shù)據(jù)。
當被執(zhí)行時,壓縮和解壓模塊116、118分別壓縮和解壓通過網(wǎng)絡106流傳送的數(shù)據(jù)。如上所述,流數(shù)據(jù)的壓縮和解壓會導致一個獨特的問題,與一次壓縮和解壓整個數(shù)據(jù)集,即塊壓縮相反。例如,數(shù)據(jù)可“實時”地流傳送,使得流傳送數(shù)據(jù)時所遇到的延遲會降低數(shù)據(jù)的有用性。壓縮和解壓模塊116、118解決了流數(shù)據(jù)的這一獨特的問題,并由此提供了已壓縮數(shù)據(jù)通過網(wǎng)絡106的流傳送,如參考圖3到5更詳細描述的。
通過使用終端服務(TS),客戶機104可訪問安裝在服務器102上的一個或多個應用程序108(1)-108(N)、執(zhí)行服務器102上的應用程序、以及在客戶機104上顯示應用程序用戶界面(UI)。由于應用程序108(1)-108(N)在服務器102上執(zhí)行,TS允許客戶機104利用企業(yè)基礎結(jié)構(gòu)資源,而與客戶機104是否具有執(zhí)行本地在客戶機104本身上的資源的硬件和軟件無關(guān)。
盡管在由服務器102執(zhí)行多個應用程序108(1)-108(N)的終端服務環(huán)境中描述了客戶機104,然而客戶機104也可執(zhí)行多個應用程序120(1)、……、120(m)、……、120(M)中的一個或多個。例如,應用程序120(1)-120(M)之一可提供一接口,它結(jié)合RDP 114使用,以呈現(xiàn)供用戶觀看的數(shù)據(jù),并從用戶接收輸入,如從鼠標108和/或鍵盤110接收輸入。另外,盡管壓縮和解壓模塊116、118被示出為相應的RDP 112、114的一部分,然而壓縮和解壓模塊116、118可被配置成獨立的軟件組件,它們被執(zhí)行來分別壓縮和解壓流數(shù)據(jù)。
另外,盡管以下討論的部分描述了終端服務環(huán)境中壓縮的使用,然而此處所描述的壓縮和解壓技術(shù)也可用于各種其它環(huán)境。例如,壓縮和解壓技術(shù)可用于壓縮遠程訪問環(huán)境中使用的數(shù)據(jù)。遠程訪問描述了從遙遠的距離訪問計算機或網(wǎng)絡的能力。例如,企業(yè)的遠程辦公室可能期望接入企業(yè)網(wǎng)絡,并使用遠程訪問來獲取諸如通過電話網(wǎng)絡、因特網(wǎng)等對其上包含的文件和應用程序的訪問權(quán)限。服務器102可被配置成具有關(guān)聯(lián)的軟件的遠程訪問服務器,該軟件被設立以處理遠程地尋求接入網(wǎng)絡的客戶機。在一個實現(xiàn)中,遠程訪問服務器包括用于安全性的防火墻服務器,以及用于將遠程訪問請求轉(zhuǎn)發(fā)到網(wǎng)絡的其它部分的路由器。遠程訪問服務器也可用作虛擬專用網(wǎng)絡(VPN)的一部分。
圖2是更詳細地示出圖1的服務器102和客戶機104的示例性實現(xiàn)200的說明。服務器102包括處理器202和存儲器204。RDP 112及其相應的壓縮模塊116被示出為在處理器202上執(zhí)行,并可儲存在存儲器204中。類似地,客戶機104包括處理器206和存儲器208。RDP 114及其相應的解壓模塊118被示出為在處理器206上執(zhí)行,并可儲存在存儲器208中。
要從服務器102流到客戶機104的數(shù)據(jù)可從各種來源提供,如執(zhí)行一個或多個應用程序108(1)-108(N)、從諸如視頻攝像機、麥克風的輸入設備210接收,等等。壓縮模塊116在服務器102的處理器202上執(zhí)行,以壓縮流到客戶機104的數(shù)據(jù)。數(shù)據(jù)可以分組的形式從服務器102流到客戶機104。
例如,壓縮模塊116可接收具有給定長度的未壓縮序列的數(shù)據(jù),并試圖將該序列向下壓縮成一較小的(現(xiàn)在已壓縮)的長度,如具有更少的字節(jié)、比特等等。壓縮模塊116可通過用一種表示來替換序列而在每一分組的基礎上壓縮數(shù)據(jù),該表示在儲存時使用比被替換的序列更少的存儲器資源,如更少的字節(jié)。
如果壓縮模塊116能夠壓縮序列,則將已壓縮的數(shù)據(jù)發(fā)送到RDP連接的端點,即客戶機104的RDP 114。解壓模塊118由客戶機104執(zhí)行,以解壓已壓縮數(shù)據(jù)來重建該數(shù)據(jù)。在壓縮模塊116無法壓縮數(shù)據(jù)的情況下,數(shù)據(jù)可以未壓縮形式,即文字序列(literal sequence)流到客戶機104。壓縮模塊116然后可由服務器102執(zhí)行,以試圖壓縮后一序列。
用于壓縮數(shù)據(jù)的基本操作涉及要壓縮的數(shù)據(jù)中的序列與已在過去流傳送的序列之間的模式匹配。為實現(xiàn)這一目的,壓縮模塊116維護一包含先前流到客戶機104的數(shù)據(jù)的歷史緩沖區(qū)212。當被執(zhí)行時,壓縮模塊116將要流傳送的數(shù)據(jù)中的序列與包括在已流到客戶機104的數(shù)據(jù)中的一個或多個序列進行匹配。要流傳送的數(shù)據(jù)中匹配歷史緩沖區(qū)中的序列的序列然后可通過使用引用歷史緩沖區(qū)212中的匹配序列的一個或多個表示來表示。該表示可以小于即使用更少的存儲器資源用于儲存要壓縮的實際序列,即匹配序列的存儲器資源。這有效地減少了包括在流數(shù)據(jù)中的數(shù)據(jù)量。
為說明使用歷史緩沖區(qū)212的模式匹配的一個基本實例,假定歷史緩沖區(qū)212包含以下序列1 2 7 4 5 6 3 9 4 5 1 4 9 1壓縮模塊116在服務器102的處理器202上執(zhí)行,并接收以下序列4 5 9 7 4 5 6 3 9 4 5 1 4 6當被執(zhí)行時,壓縮模塊116找出歷史緩沖區(qū)中匹配要壓縮的數(shù)據(jù)中的序列的最長序列,即匹配序列。在本情形中,出現(xiàn)在歷史緩沖區(qū)中的匹配序列在下面用粗體顯示。匹配序列是10字節(jié)長,并從離歷史緩沖區(qū)212的起始處三個字節(jié)之處開始(從左邊開始,并從零算起)。
4 5 9 7 4 5 6 3 9 4 5 1 4 6由此,當被執(zhí)行時,壓縮模塊116可通過將要流傳送的數(shù)據(jù)表示如下來產(chǎn)生已壓縮數(shù)據(jù)4 5 9(從離緩沖區(qū)的起始處三個字節(jié)之處開始的長度為10字節(jié)的匹配)6通過引用歷史緩沖區(qū)中的匹配序列,服務器102不需要重新發(fā)送已流到客戶機104的序列。由此,壓縮模塊116通過找出要流傳送的數(shù)據(jù)中的重復模式,并用當通過網(wǎng)絡106發(fā)送時使用更少存儲器資源和帶寬的表示來替換重復模式,即匹配序列,來壓縮要流傳送的數(shù)據(jù)。
為解壓已壓縮數(shù)據(jù),客戶機104包括解壓模塊118和歷史緩沖區(qū)214。與服務器102的歷史緩沖區(qū)212一樣,客戶機104的歷史緩沖區(qū)214儲存先前流傳送的數(shù)據(jù)。因此,當由客戶機104執(zhí)行時,解壓模塊118可通過使用歷史緩沖區(qū)214來解壓流到客戶機104的已壓縮數(shù)據(jù)。繼續(xù)前一實例,假定客戶機104接收已壓縮數(shù)據(jù),示出如下4 5 9(從離緩沖區(qū)的起始處三個字節(jié)之處開始的長度為10字節(jié)的匹配)6基于包括在已壓縮數(shù)據(jù)中的表示,當被執(zhí)行時,解壓模塊118可從歷史緩沖區(qū)214中檢索已壓縮序列,它在下面用粗體顯示4 5 9 7 4 5 6 3 9 4 5 1 4 6由此,解壓模塊118可通過使用歷史緩沖區(qū)214來解壓已壓縮的串。
服務器102也可包括查找表216,以找出歷史緩沖區(qū)212中的匹配序列。例如,查找表216可包括多個條目,其每一個可由多個索引的對應的一個發(fā)現(xiàn)。每一條目描述歷史緩沖區(qū)212中具有對應索引的每一位置。由此,當由服務器102執(zhí)行時,壓縮模塊116可使用查找表216來快速定位歷史緩沖區(qū)212中的特定序列。對查找表216和歷史緩沖區(qū)212的進一步討論可參考圖3-4找到。
服務器102也可使用編碼技術(shù)來進一步壓縮流傳送的數(shù)據(jù),如哈夫曼編碼、算術(shù)編碼、前綴編碼和馬爾可夫編碼。例如,要流傳送的數(shù)據(jù)可包括不匹配歷史緩沖區(qū)中的序列的序列。這些序列可被稱為“文字”序列。通過使用哈夫曼編碼,數(shù)據(jù)中部分或所有文字序列可被壓縮以進一步壓縮數(shù)據(jù)。例如,哈夫曼編碼可用一出現(xiàn)頻率表開始,該表關(guān)系到要被進一步壓縮的每一文字序列的出現(xiàn)頻率。出現(xiàn)頻率表可從數(shù)據(jù)本身和/或代表性數(shù)據(jù)中生成。例如,文字序列的出現(xiàn)頻率可通過處理先前流傳送的分組來獲取,然后用于處理每一后續(xù)分組。
例如,可向每一文字序列分配一唯一地表示該特定文字序列的可變長度串,如唯一的前綴。該可變長度串然后被排列成樹以分別編碼和解碼每一文字序列和表示。為編碼文字序列,在樹中定位要編碼的文字序列。樹中用于定位包括該文字序列的葉的分支用于編碼該文字序列,即,提供該文字序列的表示。例如,樹中用于哈夫曼編碼的每一分支可由一輸出字母表的碼元來標記,如比特0和1,使得編碼是從樹的根到要編碼的文字序列的路徑上的分支標記的枚舉。解碼每一表示是通過基于可變長度串中每一連續(xù)值從其起點開始通過分支向下遍歷到樹的葉,直到到達包括文字序列的樹葉為止來執(zhí)行的。
盡管描述了文字序列的哈夫曼編碼,然而可使用哈夫曼編碼來進一步壓縮各種數(shù)據(jù)。例如,哈夫曼表218可對文字222序列和后指針(backpointer)224兩者進行編碼。如上所述,文字序列包括未在歷史緩沖區(qū)212中找到的序列。因此,通過使用哈夫曼表218,文字222序列可被壓縮。哈夫曼表218也可用于壓縮后指針224。后指針224描述了歷史緩沖區(qū)212中的特定序列的位置。例如,如上所述,數(shù)據(jù)中匹配歷史緩沖區(qū)212中的序列的序列,即匹配序列,可被描述為“從離緩沖區(qū)的起始處Y字節(jié)之處開始的長度為X字節(jié)的匹配”。后指針224描述了歷史緩沖區(qū)212中的匹配序列的位置,即Y字節(jié)。哈夫曼表220可用于壓縮匹配序列的長度226,即X字節(jié)。
為解壓從服務器102流到客戶機104的已壓縮數(shù)據(jù),由客戶機104使用分別對應于服務器102的哈夫曼表218、220的哈夫曼表228、230來執(zhí)行解壓模塊。例如,哈夫曼表228可用于解壓文字232序列和后指針,而哈夫曼表230可用于解壓匹配序列的長度226。對哈夫曼表的進一步討論可參考圖7找到。
服務器102和客戶機104也可包括相應的最近使用(LRU)表236、238。LRU表236、238的每一個可用于基于后指針是否為“最近使用”后指針之一來進一步編碼后指針。例如,LRU表236可用于對最后四個后指針的每一個分別提供LRU表示。LRU表示用作在LRU表236中定位特定后指針的索引。以這一方式,重復的后指針可被進一步壓縮。對LRU表的進一步討論可參考圖7找到。
盡管描述了從服務器102流到客戶機104的數(shù)據(jù)的壓縮,然而客戶機104也可壓縮數(shù)據(jù)并將其流回服務器102。另外,盡管以下討論描述了與從服務器102流到客戶機104的分組有關(guān)的數(shù)據(jù)的壓縮,然而可使用各種數(shù)據(jù)集合來壓縮數(shù)據(jù),如子分組字節(jié)序列、多分組等等。此外,盡管以下討論描述了字節(jié)序列,然而也可構(gòu)想數(shù)據(jù)中的其它序列,如比特。
示例性過程圖3是描述示例性過程300的流程圖,其中,配置流數(shù)據(jù)用于壓縮。在塊302,向歷史緩沖區(qū)212添加數(shù)據(jù)。例如,歷史緩沖區(qū)212可包括多個分組304(1)、304(2),它們通過網(wǎng)絡106從圖2的服務器102流到和/或?qū)⒁鞯娇蛻魴C104。在另一實現(xiàn)中,分組304(1)、304(2)可對應于先前通過執(zhí)行壓縮模塊116處理的數(shù)據(jù)。
服務器102接收要流傳送的分組304(3)。當由服務器102執(zhí)行時,壓縮模塊116將分組304(3)添加到歷史緩沖區(qū)212,使得歷史緩沖區(qū)包括流傳送的分組304(1)、304(2)和將要流傳送的分組304(3)。
在塊306,當由服務器102執(zhí)行時,壓縮模塊116更新查找表216以引用添加的數(shù)據(jù),即分組304(3)。查找表216被配置成包括多個索引308(k),其中,“k”可以是從“1”到“K”的任何索引。每一索引308(k)用于發(fā)現(xiàn)查找表216中多個條目的相應的一個。每一條目涉及多個索引308(k)的對應的一個是否位于歷史緩沖區(qū)212中,并且如果是,引用對應的索引308(k)在歷史緩沖區(qū)212中的一個或多個位置。例如,多個條目之一可引用歷史緩沖區(qū)中具有索引308(k)的對應的一個的多個位置。多個位置的每一個被示出為通過使用多個散列鏈310(k)的對應的一個來描述。
例如,索引308(k)被示出為具有“4 5”的序列。查找表216中索引308(k)的對應條目,即散列鏈310(k)描述了歷史緩沖區(qū)212中索引308(k)“4 5”的每一位置。例如,分組304(1)在圖3中被示出為具有以下序列0 1 2 3 4 5 6 7分組304(2)在圖3中被示出為具有以下序列8 9 4 5 3 1 3 0要流到圖2的客戶機104的分組304(3)在圖3中被示出為具有以下序列4 5 6 7 0 8 2 4分組304(1)-304(3)可以在歷史緩沖區(qū)中順序地排列,使得觀察到以下序列0 1 2 3 4 5 6 7 8 9 4 5 3 1 3 0 4 5 6 7 0 8 2 4散列鏈310(k)描述了歷史緩沖區(qū)212中索引308(k)“4 5”的每一位置。每一位置可用各種方法來描述。例如,當從歷史緩沖區(qū)212的起始開始,以數(shù)字零開始計數(shù)時,位置可被描述為第一類型序列的位置。散列鏈310(k)描述了歷史緩沖區(qū)212中離序列的起始處16字節(jié)之處的索引308(k)“4 5”的第一位置,如在圖3中由從散列鏈310(k)中的“16”到分組304(3)的起始的虛線示出的。類似地,散列鏈310(k)描述了歷史緩沖區(qū)212中離序列的起始處10字節(jié)的索引308(k)“4 5”的第二位置,由圖3中從散列鏈310(k)中的“10”到分組304(2)的第三字節(jié)的虛線示出。此外,散列鏈310(k)包括歷史緩沖區(qū)中4字節(jié)處的索引308(k)“4 5”的第三且最終的位置。由此,查找表216包括索引310(k),如“4 5”,它具有引用描述索引308(k)在歷史緩沖區(qū)212中的每一位置,如4、10、16的散列鏈310(k)。通過更新查找表216,當被執(zhí)行時,壓縮模塊116可壓縮數(shù)據(jù)以用更有效的方式來流傳送,如下文參考圖4更詳細描述的。
盡管在圖3中示出每一索引308(k)具有多個散列鏈310(k)中對應的一個,然而可能會有索引308(k)沒有對應的散列鏈的情況。例如,在某些情形下,歷史緩沖區(qū)212可能不包括索引。因此,查找表216中對應于該索引的條目可能不包括散列鏈。換言之,該索引的散列鏈的值為零,即,歷史緩沖區(qū)212中沒有包括該對應索引的位置。另外,盡管多個散列鏈310(k)的每一個被示出為包括在查找表216中,一個或多個散列鏈310(k)可用各種方式來提供。例如,查找表216中的每一條目可包括指向一對應散列鏈的指針,該對應散列鏈被配置為與查找表216分離的數(shù)組。
圖4是描述了一個示例性過程400的流程圖,其中,被配置成包括對要流傳送的分組304(3)的引用的圖3的查找表216用于壓縮分組304(3)。在塊402,當被執(zhí)行時,壓縮模塊116開始將所添加的數(shù)據(jù),即分組304(3)的當前指針404指向圖3的塊302處的歷史緩沖區(qū)212。
在塊406,由服務器102執(zhí)行壓縮模塊116,以找出查找表216中匹配當前指針404處的初始序列的索引。例如,壓縮模塊116可使用當前指針404處由兩個字節(jié),如“4 5”組成的初始序列,以找出多個索引308(k)中匹配該初始序列的那一個。在本示例中,查找表216的索引308(k)“4 5”匹配歷史緩沖區(qū)212中當前指針404處的初始序列“4 5”。索引308(k)具有查找表216中引用描述歷史緩沖區(qū)212中索引“4 5”308(k)的每一位置的散列鏈310(k)的對應的條目。因此,該對應條目描述了歷史緩沖區(qū)212中初始序列的每一位置。
如果匹配索引308(k)的對應條目引用多個位置,則將歷史緩沖區(qū)中具有索引308(k)“4 5”的每一位置的序列與數(shù)據(jù)中具有當前指針404處的初始序列的序列進行比較。例如,當前指針404處,即歷史緩沖區(qū)212中的位置“16”處的初始序列“4 5”,以及歷史緩沖區(qū)212中位置“10”的序列具有長度為“2”,即,每一位置上字節(jié)序列中僅前兩個字節(jié)相互匹配。如上所述,本示例中,散列鏈310(k)中的位置通過從歷史緩沖區(qū)212的起始開始,從零開始計數(shù)來描述。當前指針404處的初始序列和歷史緩沖區(qū)212的位置“4”處的序列具有長度為“4”。換言之,位置“4”處的字節(jié)序列中的四個字節(jié)與位置“16”處的序列中的四個字節(jié)相匹配。以這一方式,從計算的長度導出匹配序列“4 5 6 7”。為找出最優(yōu)匹配序列,可將散列鏈310(k)中的每一位置與要壓縮的數(shù)據(jù)的序列,即分組304(3)進行比較,直到計算了最大長度和/或達到閾值,如參考圖7更詳細描述的。為優(yōu)化比較,可首先比較序列中的下一字節(jié),如歷史緩沖區(qū)212中初始序列之后的字節(jié)或索引,因為從比較中已知,前兩個字節(jié)匹配?;谛蛄兄小跋乱弧弊止?jié)的比較的另外的討論可以參考圖8找到。
在塊408,用形成壓縮數(shù)據(jù)所使用的表示來表示匹配序列。例如,分組304(3)中的匹配序列“4 5 6 7”可用描述匹配序列的長度以及匹配序列在歷史緩沖區(qū)212中的位置的表示來表示。該表示可被格式化為元組,即具有指定的順序的集合,它被格式化為{后指針,長度}。后指針可將匹配序列的相對位置描述為歷史緩沖區(qū)中的偏移。例如,后指針可將相對位置描述為歷史緩沖區(qū)中匹配序列的絕對位置和當前指針404的絕對位置之間的偏移。在本示例中,匹配序列的絕對位置是在歷史緩沖區(qū)212的位置4處,而當前指針404的絕對位置是“16”。因此,匹配序列的相對位置是離當前指針404 12字節(jié)之處。長度描述了匹配序列的長度,如“4”。由此,分組304(3)可通過用表示“{12,4}”表示匹配序列“4 5 6 7”來壓縮,以形成已壓縮數(shù)據(jù),如分組410。在另一實現(xiàn)中,匹配序列的位置可根據(jù)匹配序列在歷史緩沖區(qū)中的絕對位置,如位置4來提供。
由此,查找表216可提供歷史緩沖區(qū)212中的每一索引308(k)的每一位置。因此,當執(zhí)行壓縮模塊116時,可在歷史緩沖區(qū)212中找到初始序列的每一位置,而無需“步查(walk)”歷史緩沖區(qū)212中的每一個別比特或字節(jié)來找出匹配序列。由此,壓縮模塊116可有效地壓縮要流傳送的數(shù)據(jù)。
圖5是描述一個示例性實現(xiàn)的過程500的流程圖,其中,圖4的已壓縮數(shù)據(jù)由客戶機104通過執(zhí)行解壓模塊128來解壓。在塊502,客戶機104接收已壓縮數(shù)據(jù),如分組410,它從圖4的服務器120流到客戶機104。
在塊504,當被執(zhí)行時,解壓模塊218找出客戶機104的歷史緩沖區(qū)214中的匹配序列??蛻魴C104的歷史緩沖區(qū)214與服務器102的歷史緩沖區(qū)212一樣可包括從服務器102流到客戶機104的數(shù)據(jù)。由此,客戶機104的歷史緩沖區(qū)214在形成已壓縮數(shù)據(jù),如分組410之前匹配服務器102的歷史緩沖區(qū)212。因此,當被執(zhí)行時,解壓模塊118可根據(jù)描述服務器歷史緩沖區(qū)212中的匹配序列的長度和位置的描述來找出客戶機104的歷史緩沖區(qū)214中的匹配序列。繼續(xù)上述示例,在位置“12”處找到匹配序列“4 5 6 7”,它是上述的相對位置。
在塊506,當被執(zhí)行時,解壓模塊118用匹配序列替換該表示,以重建數(shù)據(jù)。例如,表示“{12,4}”用匹配字節(jié)序列“4 5 6 7”來替換,以形成包括序列“4 5 67 0 8 2 4”的分組508,該序列與在圖4的塊408處壓縮的分組304(3)的序列相匹配。例如,已壓縮數(shù)據(jù)可通過形成包括替換匹配序列的表示的一組新數(shù)據(jù),來從要流傳送的數(shù)據(jù)中形成。由此,如本示例中所示的,客戶機104可解壓已壓縮數(shù)據(jù),而不使用查找表216。因此,即使當客戶機104與服務器102相比減少了硬件和/或軟件資源,所流傳送的已壓縮數(shù)據(jù)也可由客戶機104解壓。
在分別參考圖3-4所描述的示例性過程300、400中,配置查找表216,使得多個索引308(k)的每一個包括兩個字節(jié)。因此,可向查找表216提供描述主機緩沖區(qū)212中的每一兩字節(jié)序列的65,536個對應條目。這使初始序列可直接在查找表216中使用。換言之,不轉(zhuǎn)換初始序列以用于查找表216來發(fā)現(xiàn)對應條目。盡管描述了具有兩個字節(jié)的索引308(k),然而可使用各種不同的索引長度,如三字節(jié)序列、四字節(jié)序列等等。
圖6是示例性實現(xiàn)600的說明,其中,在歷史緩沖區(qū)212中使用了滑動窗來包括要流傳送的數(shù)據(jù)。在參考圖3所討論的實現(xiàn)中,向歷史緩沖區(qū)212添加分組304(3)。然后更新查找表216以引用分組304(3)。然而,歷史緩沖區(qū)212可能具有有限量的存儲。因此,采用了滑動窗來包括歷史緩沖區(qū)212中新添加的數(shù)據(jù)。
例如,歷史緩沖區(qū)212可包括序列602,作為圖3的塊302處添加分組304(3)的結(jié)果。本示例中歷史緩沖區(qū)212可儲存最大24字節(jié)。因此,為添加具有八個字節(jié)的序列604,執(zhí)行壓縮模塊116以從歷史緩沖區(qū)212的起始處移除具有八個字節(jié)的序列606,并將剩余的序列移動到歷史緩沖區(qū)212的起始處。然后在歷史緩沖區(qū)212的末端添加新序列604。通過移動和添加序列,歷史緩沖區(qū)212然后就具有包括新添加序列604的24字節(jié)序列608。
為更新查找表216以反映該序列608,查找表216中散列鏈310(k)的每一位置可具有一減去的數(shù)字,它對應于歷史緩沖區(qū)212中其每一字節(jié)被移位的字節(jié)數(shù)。例如,在本示例中,每一字節(jié)被移位了8字節(jié),以為新序列604留出空間。因此,由多個散列鏈310(1)-310(k)描述的每一位置具有從位置中減去的“8”,以反映對應索引308(k)在歷史緩沖區(qū)212中的新位置。為從每一散列鏈310(k)中移除不再包括在歷史緩沖區(qū)212的位置,從散列鏈310(k)中移除其值小于零的任何位置。
圖7是描述一個示例性實現(xiàn)中的過程700的流程圖,其中,流數(shù)據(jù)的壓縮被進一步優(yōu)化。在上述參考圖3-4討論的過程300、400中,查找表216被配置成描述歷史緩沖區(qū)212中對應索引308(k)的每一位置,以有效地在歷史緩沖區(qū)212中定位初始序列。在歷史緩沖區(qū)212中找出匹配序列還可被進一步優(yōu)化,以進一步提高數(shù)據(jù)壓縮的效率。
例如,在塊702,使用查找表并采用閾值找出匹配序列。可采用各種閾值。例如,可在歷史緩沖區(qū)的預定數(shù)量的位置上執(zhí)行找出匹配序列的比較,以限制所執(zhí)行的比較次數(shù)。通過限制歷史緩沖區(qū)中與要流傳送的數(shù)據(jù)比較的位置的數(shù)量,可限制位置的大小(如,字節(jié)數(shù))。例如,如上所述,歷史緩沖區(qū)212中的匹配序列的位置可被描述為匹配序列的始端或末端與當前指針的始端或末端之間的相對位置,它可通過后指針來描述。因此,通過限制所執(zhí)行的比較的次數(shù),匹配序列將位于“更靠近”當前指針的概率就越大。由此,由于這一“靠近”,位置可具有較小的值,如使用更少的字節(jié)。在另一實現(xiàn)中,可采用閾值,使得具有超過預定閾值的值的位置不被考慮在內(nèi),這可再一次有助于限制位置的值的大小。由此,可采用各種閾值,如要搜索的位置的數(shù)量、描述該位置的值的大小、描述每一定位的序列的長度的值的大小等等。
在判決塊704,確定描述匹配序列的位置的后指針是否包括在最近使用(LRU)表內(nèi)。LRU表可用于儲存最近使用的后指針。如果匹配序列的后指針包括在LRU表中,則可使用對應于LRU表中該后指針的LRU表示來對該匹配序列的后指針進行編碼。例如,LRU表的深度可以為4,使得最后四個最近使用的后指針被儲存在LRU表中。LRU中每一后指針具有映射到LRU表的對應的LRU表示。因此,如果后指針包括在LRU表中,則在塊706,可用來自LRU表的LRU表示對后指針進行編碼。以這一方式,壓縮模塊可著眼于流數(shù)據(jù)中遇到的其它模式,以進一步壓縮數(shù)據(jù)。例如,從服務器流到客戶機的圖形數(shù)據(jù)可包括在歷史緩沖區(qū)中的相似偏移處重復的匹配序列。因此,匹配序列可使用包括匹配序列的長度和位置的表示來壓縮,通過使用LRU表示其位置得以進一步壓縮。
如果后指針不包括在LRU表中,則在塊708,可使用圖2的哈夫曼表228來編碼后指針。哈夫曼編碼可用一出現(xiàn)頻率表來開始,該表涉及要被進一步壓縮的每一后指針的出現(xiàn)頻率。向每一后指針分配一唯一地表示該后指針的可變長度串。例如,每一可變長度串可具有一唯一的前綴。該串然后可被排列成樹,以分別編碼和解碼每一后指針和表示。為編碼后指針,在樹中定位該后指針。樹中用于定位包括后指針的葉的分支用于編碼該字節(jié)序列,即,提供該后指針的表示。例如,樹中用于哈夫曼編碼的每一分支可由一輸出字母表的符號來標記,如比特0和比特1,使得編碼是對從樹根到要編碼的后指針的路徑上的分支標記的枚舉。解碼每一表示通過基于串中的每一連續(xù)值,從起源通過分支向下跟蹤樹到樹葉,直到達到包括該后指針的樹葉位置來執(zhí)行。
在塊710,也使用哈夫曼表來編碼匹配序列的長度。例如,圖2的哈夫曼表230可用于編碼歷史緩沖區(qū)中的匹配序列的長度,以進一步壓縮數(shù)據(jù)??扇鐚笾羔標枋龅哪菢訉﹂L度進行編碼。
在塊712,匹配序列由被配置成元組的表示來表示,它包括描述歷史緩沖區(qū)中匹配序列的位置以及匹配序列的長度的后指針。在塊714,采用一代價函數(shù)來確定該表示是否比匹配序列更有效,如當儲存時使用更少的存儲器資源和/或當流傳送時使用更少的帶寬。例如,在某些情形中,匹配序列可能比描述歷史緩沖區(qū)中的匹配序列的位置和長度的表示使用更少的字節(jié)。因此,可采用代價函數(shù)來確定是表示還是匹配序列,即數(shù)據(jù)中的文字序列更有效??刹捎酶鞣N代價函數(shù)。例如,代價函數(shù)可使用后指針的大小和匹配序列的長度的乘積。
在判別塊716,如果表示更有效,則在塊718,通過用該表示來表示匹配序列來形成已壓縮數(shù)據(jù)。在塊720,更新當前指針,并處理下一初始序列。例如,當前指針可按匹配序列的長度遞增,并且對數(shù)據(jù)中的下一序列重復該過程。一旦當前指針遞增通過了用于流傳送的數(shù)據(jù),將已壓縮的數(shù)據(jù)流到客戶機。
在判別塊716,如果表示并非更有效,則在塊722,如先前所描述的使用哈夫曼表來表示匹配序列。在塊720,按匹配序列中的字節(jié)數(shù)遞增當前指針,并且對下一序列繼續(xù)該過程。
如上所述,哈夫曼表可進一步壓縮要流傳送的數(shù)據(jù)。這些哈夫曼表已分別被描述成對后指針、長度和文字序列編碼。在另一實現(xiàn)中,可組合哈夫曼表。例如,如圖2所示,哈夫曼表228可用于編碼文字232字節(jié)序列和后指針234。為在已壓縮流中區(qū)別后指針和文字序列,可分別向后指針和文字序列提供唯一的前綴,如,每一后指針用比特“0”開始,每一文字序列用比特“1”開始。在另一實現(xiàn)中,可使用同一的索引代碼,通過將文字序列和后指針組合成單個字母表,使得后指針和文字序列具有不同的各自的字符,來對這兩者進行編碼。
諸如上述哈夫曼表等編碼表可用各種方式來提供。例如,在一個實現(xiàn)中,預配置編碼表以供壓縮和解壓模塊使用,使得不需要對要流傳送的數(shù)據(jù)的每一分組計算編碼表。這可用于提高加密過程的速度。在另一實現(xiàn)中,以預定的間隔動態(tài)地計算編碼表。例如,可在每一次接收預定數(shù)量的分組時重新計算編碼表,以更新編碼表。
圖8是一個示例性實現(xiàn)800的說明,其中,對序列的壓縮進行優(yōu)化以進一步優(yōu)化數(shù)據(jù)壓縮。如上所述,服務器102包括歷史緩沖區(qū)212和查找表216。服務器102執(zhí)行壓縮模塊116來壓縮分組304(3)。從歷史緩沖區(qū)212的起始處到其前兩個字節(jié)相同的最右邊的序列的起始的偏移可被表示為i1=HASH[HASH_SUM(s)]。在所示的示例中,當從歷史緩沖區(qū)212的起始處從零開始計數(shù)時,“s”等于“4 5”,i1=10。從歷史緩沖區(qū)212的起始處到下一最右邊序列的下一偏移可被表示為i2=NEXT[i1]。在圖8所示的示例中,在散列鏈802(k)中,i2=NEXT[10]=4。類似地,從歷史緩沖區(qū)212的起始處的每一連續(xù)的偏移可在散列鏈802(k)中表示,如i3=NEXT[i2]。在所示的示例中,i3=0,因為在歷史緩沖區(qū)212中沒有包括“4 5”的其它序列。
當被執(zhí)行時,壓縮模塊116然后可啟動一過程以壓縮從歷史緩沖區(qū)212中的位置16的“4 5”開始的分組304(3)。壓縮模塊116首先可定位歷史緩沖區(qū)212中具有來自散列鏈802(k)的位置i1=HASH[HASH_SUM(′4′,′5′)]=10的初始序列“4 5”的序列。該位置被儲存,并且NEXT[16]被設為10,HASH[HASH_SUM(′4′,′5′)被設為16。通過首先比較相應序列中的下一順序字節(jié),在當前位置(16)和位置i1(10)相互比較序列。在本情形中,將分組304(3)中的第三字節(jié)與分組304(2)中的第五字節(jié)進行比較以找出匹配。在所示的示例中,下一順序字節(jié)(即,相應的序列中的第三字節(jié))是不同的,因為HISTORY[10+3]=′3′,而HISTORY[16+3]=′6′。因此,預期匹配序列的長度保持在2,而預期匹配序列的位置保持在10。
壓縮模塊116然后可在歷史緩沖區(qū)212中從定位查找表216的位置i2=NEXT[i1]=4處的下一序列。由于i2不等于0,有至少兩個字節(jié)的匹配。相應的字節(jié)“4 5”之后的下一順序字節(jié)被如上所述地比較,得到4字節(jié)的匹配。因此,預期匹配序列的長度被設為4,而預期匹配序列的位置被設為4。壓縮模塊116然后可在歷史緩沖區(qū)212中從定位散列鏈802(k)的位置i3=NEXT[i2]=0處的另一序列。由于i3等于0,它是散列鏈802(k)的末端,并且不比較任何其它位置。應當注意,在一個實現(xiàn)中,壓縮模塊116不特別地核查散列鏈802(k)的末端。相反,位置“i0”(圖8所示的示例中為16)處的序列被設為等于i0。因此,當?shù)竭_散列鏈802(k)的末端(iN=NEXT[i{N-1}]=0)時,核查它,并且壓縮模塊116前進到i{N+1}=NEXT[iN]=i0。
通過比較預期匹配序列長度之后的“下一”順序字節(jié),可提高比較的速度。例如,在上述示例中,將HISTORY[i0+匹配長度]與HISTORY[i0+匹配長度]進行比較,當歷史緩沖區(qū)212中沒有其它序列用于比較時,然后執(zhí)行每一相應位置上的全序列的比較。換言之,在歷史緩沖區(qū)212中的相應位置上的相應序列中,將每一字節(jié)相互比較。如果全序列比較成功,則導出匹配序列。以這一方式,可獲得歷史緩沖區(qū)212中的序列比較的可測量的加速。
圖9是一個示例性實現(xiàn)的系統(tǒng)900的說明,其中,響應于從系統(tǒng)接收的反饋動態(tài)地調(diào)整壓縮。由于各種各樣的因素,服務器102和客戶機104之間通過網(wǎng)絡的通信可以變化。例如,客戶機104可具有有限的軟件和/或硬件資源,使得客戶機104花費比服務器102壓縮數(shù)據(jù)更長的時間來解壓數(shù)據(jù)。在另一示例中,服務器102可向多個客戶機提供數(shù)據(jù),并因此客戶機可能比服務器102為每一客戶機壓縮數(shù)據(jù)更快地解壓數(shù)據(jù)。通過調(diào)整先前描述的一個或多個壓縮參數(shù),可優(yōu)化服務器102和客戶機104之間的通信,使得可考慮服務器102和104的硬件和/或軟件資源,以及通信上耦合它們的網(wǎng)絡106的資源。例如,如果服務器102正在“等候”向客戶機104發(fā)送已壓縮數(shù)據(jù),則服務器102可執(zhí)行附加的壓縮計算以進一步壓縮數(shù)據(jù)。
為調(diào)整RDP 112的壓縮模塊116的參數(shù),獲取反饋??墒褂酶鞣N因素作為反饋來調(diào)整壓縮參數(shù),如通用網(wǎng)絡特征。例如,來自網(wǎng)絡層的指示由于慢鏈路而存在網(wǎng)絡反壓力(backpressure)的信息可由壓縮模塊116使用來指示有額外的時間來進一步壓縮數(shù)據(jù)。因此,壓縮模塊116可被動態(tài)地調(diào)整來花費更多的時間壓縮數(shù)據(jù),以當存在反壓力時減小最終輸出的大小。
在另一示例中,RDP 112可使用歷史緩沖區(qū)904(1)、……、904(h)、……、904(H)的固定池(pool)902。希望發(fā)送數(shù)據(jù)的較高層通過向池902請求(分配)緩沖區(qū)(如,緩沖區(qū)904(h))、用數(shù)據(jù)填充緩沖區(qū)904(h)(包括壓縮數(shù)據(jù))、然后將已壓縮的數(shù)據(jù)發(fā)送到客戶機104來操作。當發(fā)送了緩沖區(qū)的內(nèi)容時,緩沖區(qū)904(h)僅被返回到池902,即“釋放”。這一技術(shù)允許RDP 112,尤其是壓縮模塊116能夠基于花費了多久將緩沖區(qū)“釋放”回緩沖區(qū)池,來獲取關(guān)于是有慢連接還是快連接(如,帶寬量)、慢客戶機還是快客戶機(如,客戶機解壓數(shù)據(jù)所花費的時間量)等的反饋,即反壓力信息。
在又一示例中,如果池902的緩沖區(qū)904(1)-904(H)沒有一個可用,則可通過調(diào)整各種壓縮閾值以在壓縮上花費更多的時間,來調(diào)節(jié)壓縮模塊116以“更努力地工作”。一旦網(wǎng)絡條件改善,也可調(diào)整壓縮模塊116以執(zhí)行更少的壓縮操作,使得數(shù)據(jù)更快速地被發(fā)送出去。例如,如果網(wǎng)絡106具有相當大量的可用帶寬,則可減少所執(zhí)行的壓縮操作的數(shù)量,因為不需要壓縮來降低傳遞數(shù)據(jù)所花費的時間。以這一方式,可采用一種動態(tài)技術(shù),使得基于波動的網(wǎng)絡條件在運行時改變壓縮參數(shù)。在另一實現(xiàn)中,使用網(wǎng)絡速度的初始度量來調(diào)整參數(shù),這些參數(shù)然后貫穿整個會話而使用。
如上所述,用于調(diào)整壓縮模塊116的因素也可考慮服務器102的硬件和/或軟件資源。例如,可考慮服務器102的負載(如,服務器102正提供多少活動會話、圖2的處理器上的負載等等),并動態(tài)調(diào)整壓縮強度以通過在壓縮上使用更少的CPU來補償。可被調(diào)整的壓縮參數(shù)的一個示例是搜索窗大小。例如,搜索窗大小可從64K調(diào)整到512K。更大的窗可提供更多相關(guān)壓縮,但是實現(xiàn)較慢。因此,如果認為網(wǎng)絡慢時,“切換”到大窗是有利的。
用于調(diào)整壓縮模塊116的因素的另一示例是散列鏈中被遍歷來查找匹配的鏈接數(shù)量可被調(diào)整。例如,步查更長的鏈鏈接可提高找到更長匹配的概率,但是可消耗額外的硬件和/或軟件資源來執(zhí)行匹配。
用于調(diào)整壓縮模塊116的因素的又一示例是指定用于終止搜索的所找到的最長匹配的閾值。如上所述,該閾值可用于限制找出匹配所執(zhí)行的搜索的量。這一閾值越大,找到更長匹配的概率越大,并由此可以進一步壓縮數(shù)據(jù)。然而,當執(zhí)行這一搜索時,也可使用更大量的處理資源。盡管討論了各種因素和參數(shù),各種其它因素和參數(shù)也可如此處所描述地使用。
盡管以對結(jié)構(gòu)特征和/或方法動作專用的語言描述了本發(fā)明,然而可以理解,所附權(quán)利要求書中定義的本發(fā)明不必要局限于所描述的具體特征或動作。相反,揭示了具體特征和動作作為實現(xiàn)本發(fā)明的示例性形式。
權(quán)利要求
1.一種方法,包括壓縮數(shù)據(jù)以在終端服務環(huán)境中傳遞,其特征在于,它通過以下行動來壓縮數(shù)據(jù)在一查找表中找出一匹配數(shù)據(jù)中的初始序列的索引,其中所述查找表包括多個條目,每一所述條目可使用多個所述索引中的特定一個來發(fā)現(xiàn);以及每一所述條目涉及一對應的所述索引是否位于一歷史緩沖區(qū)中,并且如果是,則還引用所述歷史緩沖區(qū)中對應的所述索引的一個或多個位置;以及如果所述匹配索引的對應的所述條目引用多個所述位置對于每一所述位置,將所述位置上具有所述匹配索引的序列與所述數(shù)據(jù)中的序列進行比較,所述序列包括所述初始序列;基于每一所述位置上的序列的長度和位置中的至少一個,從所述比較中導出一匹配序列;以及使用包括所述歷史緩沖區(qū)中的匹配序列的長度和位置的表示來表示所述匹配序列。
2.如權(quán)利要求1所述的方法,其特征在于,它還包括對所述數(shù)據(jù)中的每一所述序列,找出所述查找表中的一個所述索引;形成包括一個或多個所述表示的已壓縮數(shù)據(jù);以及流傳送所述已壓縮數(shù)據(jù)。
3.如權(quán)利要求1所述的方法,其特征在于,所述匹配索引的對應的所述條目引用一散列鏈,它包括所述歷史緩沖區(qū)中的匹配索引的每一所述位置。
4.如權(quán)利要求1所述的方法,其特征在于,所述初始序列和所述索引的每一個都由至少兩個字節(jié)組成。
5.如權(quán)利要求1所述的方法,其特征在于,它還包括形成包括所述表示的已壓縮數(shù)據(jù);以及通過網(wǎng)絡流傳送所述已壓縮數(shù)據(jù),其中,所述數(shù)據(jù)被格式化為一個或多個分組。
6.如權(quán)利要求1所述的方法,其特征在于,它還包括使用一選自以下組中的編碼技術(shù)對所述表示的長度和位置的至少一個進行編碼哈夫曼編碼;算術(shù)編碼;前綴編碼;以及馬爾可夫編碼。
7.如權(quán)利要求1所述的方法,其特征在于如果所述匹配索引的對應的所述條目不引用任何所述位置,則通過哈夫曼編碼來編碼所述初始序列;如果所述匹配索引的對應的所述條目引用單個所述位置將單個所述位置處具有所述匹配索引的序列與所述數(shù)據(jù)中的序列進行比較;基于單個所述位置處的序列的長度和位置的至少一個,從所述比較中導出一匹配序列;以及使用包括所述歷史緩沖區(qū)中的匹配序列的長度和單個所述位置的表示來表示所述匹配序列;以及當所述數(shù)據(jù)的每一所述序列被表示或被編碼時,流傳送具有所述編碼或所述表示的數(shù)據(jù)。
8.如權(quán)利要求1所述的方法,其特征在于,導出所述匹配序列的所述比較是使用選自以下組中的一個或多個閾值來執(zhí)行的具有要比較的所述匹配索引的所述位置的數(shù)量;描述具有所述匹配索引的每一所述位置的值的大??;以及描述每一所述位置處與所述數(shù)據(jù)中包括所述匹配索引的序列相匹配的序列的長度的值的大小。
9.如權(quán)利要求1所述的方法,其特征在于,它還包括采用一代價函數(shù)來確定所述表示是否在儲存時比所述匹配序列使用了更少的存儲器,并且如果是,形成包括所述表示的已壓縮數(shù)據(jù)。
10.如權(quán)利要求1所述的方法,其特征在于,它還包括確定所述匹配序列的位置是否與一最近使用(LRU)表中的多個位置之一相匹配,其中所述LRU表中的每一所述位置具有一對應的所述LRU表示;所述LRU表中的每一所述位置描述了先前經(jīng)流傳送的數(shù)據(jù)中多個最近使用的序列位置之一;以及如果所述匹配序列的位置被包括在所述LRU表中,則用來自所述LRU表的對應的所述LRU表示來編碼所述匹配序列的位置。
11.一個或多個包括計算機可執(zhí)行指令的計算機可讀媒質(zhì),當所述指令被執(zhí)行時,實現(xiàn)權(quán)利要求1所述的方法。
12.一種方法,它包括壓縮數(shù)據(jù)以在終端服務環(huán)境中傳遞,其特征在于,它通過執(zhí)行以下行動壓縮數(shù)據(jù)向一歷史緩沖區(qū)添加數(shù)據(jù);更新一引用所述歷史緩沖區(qū)的查找表以包括所添加的數(shù)據(jù),其中所述查找表包括多個條目,每一所述條目可使用多個索引中的特定一個來發(fā)現(xiàn);以及每一所述條目涉及對應的所述索引是否位于所述歷史緩沖區(qū)中,并且如果是,還引用所述歷史緩沖區(qū)中對應的所述索引的一個或多個位置;在所述歷史緩沖區(qū)中所添加的數(shù)據(jù)之處開始一當前指針;在所述查找表中找出匹配所述當前指針處的初始序列的一個所述索引;如果所述匹配索引的對應的所述條目引用多個所述位置將每一所述位置上具有所述匹配索引的序列與所添加的輸入數(shù)據(jù)中包括所述初始序列的序列進行比較;從所述比較中導出一匹配序列;用包括所述歷史緩沖區(qū)中的匹配序列的位置和長度的表示來表示所述匹配序列;采用一代價函數(shù)來確定所述表示在儲存時是否比所述匹配序列使用更少的存儲器空間,如果是,則配置數(shù)據(jù)以包括所述表示,并將所述當前指針前進所述匹配序列的長度,否則,配置所述數(shù)據(jù)以包括所述初始序列,并將所述當前指針前進所述初始序列的長度;以及當所述當前指針前進通過所添加的數(shù)據(jù)時,分組化所配置的數(shù)據(jù)用于流傳送。
13.如權(quán)利要求12所述的方法,其特征在于,它還包括使用一選自以下組中的編碼技術(shù)對所述表示的長度和位置的至少一個進行編碼哈夫曼編碼;算術(shù)編碼;前綴編碼;以及馬爾可夫編碼。
14.如權(quán)利要求12所述的方法,其特征在于,當所述當前指針處的初始序列不匹配所述歷史緩沖區(qū)中的任何序列時,對所述當前指針處的初始字節(jié)序列進行編碼,以包括在所配置的數(shù)據(jù)中,用于通過一選自以下組中的編碼技術(shù)來流傳送哈夫曼編碼;算術(shù)編碼;前綴編碼;以及馬爾可夫編碼。
15.如權(quán)利要求12所述的方法,其特征在于,它還包括確定所述匹配序列的位置是否與一最近使用(LRU)表中的多個位置之一相匹配,其中所述LRU表中的每一所述位置具有一對應的所述LRU表示;所述LRU表中的每一所述位置描述了先前經(jīng)流傳送的數(shù)據(jù)中多個最近使用的序列位置中的一個;以及如果所述匹配序列的位置被包括在所述LRU表中,則用來自所述LRU表的對應的所述LRU表示來編碼所述匹配序列的位置。
16.一個或多個包括計算機可執(zhí)行指令的計算機可讀媒質(zhì),當所述指令被執(zhí)行時,實現(xiàn)權(quán)利要求12所述的方法。
17.一種方法,其特征在于,它包括接收反饋,它指示用于通過網(wǎng)絡將數(shù)據(jù)從由服務器提供的終端服務傳遞到客戶機時的資源的可用性;以及響應于所述反饋,調(diào)整一用于壓縮所述數(shù)據(jù)的壓縮例程的一個或多個參數(shù)。
18.如權(quán)利要求17所述的方法,其特征在于,所述資源選自以下組所述客戶機的硬件資源;所述客戶機的軟件資源;所述網(wǎng)絡的網(wǎng)絡資源;所述服務器的硬件資源;所述服務器的軟件資源;以及其任一組合。
19.一個或多個包括計算機可執(zhí)行指令的計算機可讀媒質(zhì),當所述指令被執(zhí)行時,實現(xiàn)權(quán)利要求17所述的方法。
20.一種方法,其特征在于,它包括在服務器處從客戶機接收對通過所述服務器可用的應用程序或文件進行遠程訪問的請求;響應于通過網(wǎng)絡的所述請求,確定用于傳遞數(shù)據(jù)的資源的可用性;以及基于所確定的可用性,調(diào)整一用于壓縮所述數(shù)據(jù)的壓縮協(xié)議的一個或多個參數(shù)。
21.如權(quán)利要求20所述的方法,其特征在于,所述資源選自以下組所述客戶機的硬件資源;所述客戶機的軟件資源;所述網(wǎng)絡的網(wǎng)絡資源;所述服務器的硬件資源;所述服務器的軟件資源;以及其任一組合。
22.一個或多個包括計算機可執(zhí)行指令的計算機可讀媒質(zhì),當所述指令被執(zhí)行時,實現(xiàn)權(quán)利要求20所述的方法。
23.一種服務器,其特征在于,它包括一歷史緩沖器,它具有多個字節(jié);一查找表,它包括多個條目,每一所述條目可使用多個索引中特定的一個來發(fā)現(xiàn);以及涉及對應的所述索引是否位于所述歷史緩沖區(qū)中,并且如果是,還引用所述歷史緩沖區(qū)中對應的所述索引的一個或多個位置;以及一壓縮模塊,它可執(zhí)行以便在所述查找表中找出與用于從終端服務傳遞到客戶機的數(shù)據(jù)中的初始序列相匹配的一個所述索引序列;如果所述匹配索引的對應的所述條目引用多個所述位置對于每一所述位置,將所述位置上具有所述匹配索引的序列與所述數(shù)據(jù)中的序列進行比較,所述序列包括所述初始序列;基于每一所述位置上的序列的長度和位置中的至少一個,從所述比較中導出一匹配序列;以及使用包括所述歷史緩沖區(qū)中的匹配序列的長度和位置的表示來表示所述匹配序列。
24.如權(quán)利要求23所述的服務器,其特征在于,所述壓縮模塊還可執(zhí)行以便對所述數(shù)據(jù)中的每一所述序列,在所述查找表中找出一個所述索引;形成包括一個或多個所述表示的已壓縮數(shù)據(jù);以及流傳送所述已壓縮數(shù)據(jù)。
25.如權(quán)利要求23所述的服務器,其特征在于,所述匹配索引的對應的所述條目引用一散列鏈,它包括所述歷史緩沖區(qū)中匹配索引的每一所述位置。
26.如權(quán)利要求23所述的服務器,其特征在于,所述初始序列和所述索引的每一個都由至少兩個字節(jié)組成。
27.如權(quán)利要求23所述的服務器,其特征在于,所述壓縮模塊還可執(zhí)行以便形成包括所述表示的已壓縮數(shù)據(jù);以及分組化所述已壓縮數(shù)據(jù)用于通過網(wǎng)絡流傳送,其中,所述數(shù)據(jù)被格式化為一個或多個分組。
28.如權(quán)利要求23所述的服務器,其特征在于,所述壓縮模塊還可執(zhí)行以便通過一選自以下組中的編碼技術(shù)對所述表示的長度和位置的至少一個進行編碼哈夫曼編碼;算術(shù)編碼;前綴編碼;以及馬爾可夫編碼。
29.如權(quán)利要求23所述的服務器,其特征在于,所述壓縮模塊還可執(zhí)行,以便如果所述匹配索引的對應的所述條目不引用任何所述位置,通過一選自以下組中的編碼技術(shù)對所述初始序列進行編碼哈夫曼編碼;算術(shù)編碼;前綴編碼;以及馬爾可夫編碼。
30.如權(quán)利要求23所述的服務器,其特征在于,導出所述匹配序列的所述比較是使用選自以下組中的一個或多個閾值來執(zhí)行的具有要被比較的所述匹配索引的所述位置的數(shù)量;描述具有所述匹配索引的每一所述位置的值的大??;以及描述每一所述位置上與所述數(shù)據(jù)中包括所述匹配索引的序列相匹配的序列的長度的值的大小。
31.如權(quán)利要求23所述的服務器,其特征在于,所述壓縮模塊還可執(zhí)行,以便采用一代價函數(shù)來確定所述表示在存儲時是否比所述匹配序列使用更少的存儲器,并且如果是,形成包括所述表示的已壓縮數(shù)據(jù)。
32.如權(quán)利要求23所述的服務器,其特征在于,所述壓縮模塊還可執(zhí)行,以便確定所述匹配序列的位置是否與一最近使用(LRU)表中的多個位置中的一個相匹配,其中所述LRU表中的每一所述位置具有一對應的所述LRU表示;所述LRU表中的每一所述位置描述先前經(jīng)流傳送的數(shù)據(jù)中多個最近使用的序列位置中的一個;以及如果所述匹配序列的位置被包括在所述LRU表中,則用來自所述LRU表的對應的所述LRU表示來編碼所述匹配序列的位置。
33.一種系統(tǒng),其特征在于,它包括一網(wǎng)絡;一服務器,包括第一歷史緩沖區(qū),它具有多個字節(jié);一查找表,它包括多個條目,每一所述條目可使用多個索引中特定的一個來發(fā)現(xiàn),每一所述條目涉及對應的所述索引是否位于所述歷史緩沖區(qū)中,并且如果是,引用所述歷史緩沖區(qū)中對應的所述索引的一個或多個位置;以及一壓縮模塊,它可執(zhí)行以便響應于一遠程訪問請求,在所述查找表中找出所述數(shù)據(jù)中與當前指針處的初始序列相匹配的一個所述索引;如果所述匹配索引的對應的所述條目引用一個或多個所述位置將每一所述位置上具有所述匹配索引的序列與所述數(shù)據(jù)中當前指針處的序列進行比較;從所述比較中導出一匹配序列;配置數(shù)據(jù)以包括一表示,該表示包括所述第一歷史緩沖區(qū)中所述匹配序列的位置和長度,并將所述當前指針前進所述匹配序列的長度;如果所述匹配索引的對應的所述條目不引用任何所述位置,則配置數(shù)據(jù)以包括所述初始序列,并將所述當前指針前進所述初始序列的長度;以及當所述當前指針前進通過所添加的數(shù)據(jù)時,通過所述網(wǎng)絡流傳送所配置的數(shù)據(jù);以及一客戶機,它通信上耦合至所述網(wǎng)絡,并包括第二歷史緩沖區(qū)和一解壓模塊,所述解壓模塊可執(zhí)行,以便通過基于由所述表示所指示的位置和長度在所述第二歷史緩沖區(qū)中找出所述匹配序列,來解壓所述經(jīng)流傳送的數(shù)據(jù)。
34.如權(quán)利要求33所述的系統(tǒng),其特征在于,所述解壓模塊還可由所述客戶機執(zhí)行以向所述第二歷史緩沖區(qū)添加所解壓的數(shù)據(jù)。
35.如權(quán)利要求33所述的系統(tǒng),其特征在于,所述壓縮模塊還可由所述服務器執(zhí)行,以通過一選自以下組中的編碼技術(shù)對所述表示的長度和位置的至少一個進行編碼哈夫曼編碼;算術(shù)編碼;前綴編碼;以及馬爾可夫編碼。
36.如權(quán)利要求33所述的系統(tǒng),其特征在于,如果所述匹配索引的對應的所述條目不引用任何所述位置,則所述壓縮模塊還可執(zhí)行,以通過一選擇以下組中的編碼技術(shù)對所述初始序列進行編碼哈夫曼編碼;算術(shù)編碼;前綴編碼;以及馬爾可夫編碼。
37.如權(quán)利要求33所述的系統(tǒng),其特征在于,所述壓縮模塊還可由所述服務器執(zhí)行,以確定所述匹配序列的位置是否與一最近使用(LRU)表中的多個位置中的一個相匹配,其中所述LRU表中的每一所述位置具有一對應的所述LRU表示;所述LRU表中的每一所述位置描述先前經(jīng)流傳送的數(shù)據(jù)中多個最近使用的序列位置中的一個;以及如果所述匹配序列的位置被包括在所述LRU表中,則用來自所述LRU表的對應的所述LRU表示來編碼所述匹配序列的位置。
38.一種包括計算機可執(zhí)行指令的計算機可讀媒質(zhì),其特征在于,當所述指令由計算機執(zhí)行時,引導所述計算機在一查找表中找出與用于流到客戶機的數(shù)據(jù)中的一初始序列相匹配的索引,所述數(shù)據(jù)用于生成遠程地從所述客戶機執(zhí)行的應用程序的用戶界面,其中所述查找表包括多個條目,每一所述條目可使用多個所述索引中的特定的一個來發(fā)現(xiàn);以及每一所述條目涉及一對應的所述索引是否位于一歷史緩沖區(qū)中;并且如果是,還引用所述歷史緩沖區(qū)中對應的所述索引的一個或多個位置;如果所述匹配索引的對應的所述條目引用多個所述位置對于每一所述位置,將所述位置上具有所述匹配索引的序列與所述數(shù)據(jù)中的序列相比較,所述序列包括所述初始序列;以及根據(jù)所述比較計算所述匹配序列的長度。
39.如權(quán)利要求38所述的計算機可讀媒質(zhì),其特征在于,所述計算機可執(zhí)行指令引導所述計算機使用一包括所述長度和位置的表示來表示所述匹配序列。
40.如權(quán)利要求38所述的計算機可讀媒質(zhì),其特征在于,所述匹配索引的對應的所述條目引用一散列鏈,它包括所述歷史緩沖區(qū)中所述匹配索引的每一所述位置。
41.如權(quán)利要求38所述的計算機可讀媒質(zhì),其特征在于,所述初始序列和所述索引的每一個都由至少兩個字節(jié)組成。
42.如權(quán)利要求38所述的計算機可讀媒質(zhì),其特征在于,所述計算機可執(zhí)行指令引導所述計算機通過一選自以下組中的編碼技術(shù)對所述長度和位置的至少一個進行編碼哈夫曼編碼;算術(shù)編碼;前綴編碼;以及馬爾可夫編碼。
43.如權(quán)利要求38所述的計算機可讀媒質(zhì),其特征在于,所述計算機可執(zhí)行指令引導所述計算機,如果所述匹配索引的對應的所述條目不引用任何位置,則通過一選擇以下組中的編碼技術(shù)對所述初始序列進行編碼哈夫曼編碼;算術(shù)編碼;前綴編碼;以及馬爾可夫編碼。
44.如權(quán)利要求38所述的計算機可讀媒質(zhì),其特征在于,所述比較是使用選自以下組中的一個或多個閾值來執(zhí)行的具有要被比較的所述匹配索引的所示位置的數(shù)量;描述具有所述匹配索引的每一所述位置的值的大小;以及描述每一所述位置上與所述數(shù)據(jù)中包括所述匹配索引的序列相匹配的序列的長度的值的大小。
45.如權(quán)利要求38所述的計算機可讀媒質(zhì),其特征在于,所述計算機可執(zhí)行指令引導所述計算機采用一代價函數(shù)確定包括所述匹配序列的長度和位置的表示在儲存時是否比所述匹配序列使用更少的存儲器,并且如果是,形成包括所述表示的已壓縮數(shù)據(jù)。
46.如權(quán)利要求38所述的計算機可讀媒質(zhì),其特征在于,所述計算機可執(zhí)行指令引導所述計算機確定所述匹配序列的位置是否與一最近使用(LRU)表中的多個位置中的一個相匹配,其中所述LRU表中的每一所述位置具有一對應的所述LRU表示;所述LRU表中的每一所述位置描述先前經(jīng)流傳送的數(shù)據(jù)中多個最近使用的序列位置中的一個;以及如果所述匹配序列的位置被包括在所述LRU表中,則用來自所述LRU表的對應的所述LRU表示來編碼所述匹配序列的位置。
全文摘要
描述了流數(shù)據(jù)的壓縮。在一個實現(xiàn)中,一種方法包括通過在一查找表中找出匹配數(shù)據(jù)中一初始序列的索引,壓縮數(shù)據(jù)用于在終端服務環(huán)境中傳遞。該查找表包括多個條目。每一條目可使用多個索引中的特定一個來發(fā)現(xiàn)。每一條目涉及對應索引是否位于歷史緩沖區(qū)中,并且如果是,還引用歷史緩沖區(qū)中對應索引的一個或多個位置。如果匹配索引的對應條目引用多個位置,對每一位置,將具有匹配索引的序列與數(shù)據(jù)中包括初始序列的序列進行比較?;诿恳晃恢蒙系男蛄械拈L度和位置,從比較中導出一匹配序列。該匹配序列使用包括歷史緩沖區(qū)中匹配序列的長度和位置的表示來表示。
文檔編號G06F13/00GK1671103SQ200510009159
公開日2005年9月21日 申請日期2005年2月4日 優(yōu)先權(quán)日2004年3月15日
發(fā)明者A·V·卡達齊, M·V·斯里格, N·Y·阿布多 申請人:微軟公司