專利名稱:一種應(yīng)用的壓縮編碼方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及移動互聯(lián)網(wǎng)領(lǐng)域,尤其涉及一種應(yīng)用的壓縮編碼方法及裝置。
背景技術(shù):
隨著智能終端功能的日益強大,智能終端已逐漸融入到人們的日常生活之中,用戶可以通過互聯(lián)網(wǎng)自行下載安裝各種應(yīng)用,以此來擴充終端功能。然而,因為目前應(yīng)用的安裝包都很大,一般在幾兆至幾十兆之間不等,而移動通信網(wǎng)絡(luò)的數(shù)據(jù)傳輸速率為幾千字節(jié)至幾十千字節(jié)每秒之間,按照這種速率計算,如果用戶不使用WiFi的話,就要花費幾分鐘甚至十幾分鐘的時間才能下載一個普通應(yīng)用。用戶在花費大量等待時間的同時,還要支付由此產(chǎn)生的數(shù)據(jù)流量費用。此外,由于下載等待的時間較長,用戶可能會手動終止下載過程,在這種情況下,用戶不僅沒有下載到其期望的應(yīng)用,還要支付本次下載產(chǎn)生的數(shù)據(jù)流量費用,極大地影響了用戶體驗。
發(fā)明內(nèi)容
本發(fā)明實施例應(yīng)用的壓縮編碼方法及裝置,提高了應(yīng)用安裝包的壓縮比,使安裝包盡量小就能降低用戶下載安裝包的時間。為此,本發(fā)明實施例提供如下技術(shù)方案一種應(yīng)用的壓縮編碼方法,所述方法包括解析應(yīng)用的安裝包,獲取所述應(yīng)用的字節(jié)碼和資源文件;分別對所述字節(jié)碼和資源文件進行壓縮編碼,再組裝成形成壓縮文件;其中,利用LZ77算法對所述字節(jié)碼進行壓縮編碼。優(yōu)選的,對所述資源文件進行壓縮編碼,具體包括根據(jù)所述資源文件的文件頭判斷所述資源文件是否為特定資源文件;如果為特定資源文件,則通過與所述特定資源文件相匹配的特定壓縮算法進行壓縮編碼;如果為非特定資源文件,則通過通用壓縮算法進行壓縮編碼。優(yōu)選的,所述特定資源文件為圖片文件、視頻文件或者音頻文件,則壓縮所述特定資源文件的方式包括利用差分脈沖調(diào)制編碼、DEFLATE算法、LZff算法對所述圖片文件進行壓縮編碼;利用離散余弦變換以及運動補償預(yù)測技術(shù)對所述視頻文件進行壓縮編碼;利用子帶編碼、MDCT、感知模型、低比特率量化、量化以及哈夫曼編碼對所述音頻文件進行壓縮編碼;所述非特定資源文件為XML文件或者文本文件,則所述通用壓縮算法為LZMA算法。優(yōu)選的,所述利用LZ77算法對所述字節(jié)碼進行壓縮編碼,具體包括判斷當(dāng)前待編碼字符是否與滑動窗內(nèi)的已編碼字符相匹配,所述當(dāng)前待編碼字符為所述滑動窗外的第一個未編碼字符;如果相匹配,則繼續(xù)查找最長的匹配字符串,并輸出指針(off、len、c),其中,off表示所述匹配字符串相對滑動窗的窗口邊界的偏移量,Ien表示所述匹配字符串的長度,c為與所述匹配字符串相鄰的下一個字符;如果未匹配,則輸出指針(off、len、d),其中d表示所述當(dāng)前待編碼字符;將所述滑動窗向后移動(len+Ι)個字符,繼續(xù)執(zhí)行所述判斷當(dāng)前待編碼字符是否與滑動窗內(nèi)的已編碼字符相匹配的步驟,直至將所有未編碼字符全部轉(zhuǎn)化為指向所述滑動窗的指針。優(yōu)選的,所述利用LZ77算法對所述字節(jié)碼進行壓縮編碼,具體包括將所述字節(jié)碼包含的字符依次映射成9bit的編碼,所述9bit的編碼包括間隔符“I”以及該字符的8bitASCII碼;
在映射編碼過程中,如果存在與已映射編碼的字符相同的字符序列,則將所述字符序列編碼成指向所述已映射編碼的字符的指針和所述字符序列的長度。優(yōu)選的,根據(jù)字節(jié)碼的大小、字符序列出現(xiàn)的位置和字符序列的長度,設(shè)置所述字符序列編碼成的指針和長度的ASCII碼表示方式。優(yōu)選的,如果存在至少兩種所述指針和長度的ASCII碼表示方式,則所述字符序列的編碼還包括標(biāo)識位,所述標(biāo)識位用于表示采用的ASCII碼表示方式。一種應(yīng)用的壓縮編碼裝置,所述裝置包括解析單元,用于解析應(yīng)用的安裝包,獲取所述應(yīng)用的字節(jié)碼和資源文件;第一壓縮單元,用于對所述資源文件進行壓縮編碼;第二壓縮單元,用于利用LZ77算法對所述字節(jié)碼進行壓縮編碼;組裝單元,用于組裝所述第一壓縮單元和第二壓縮單元輸出的文件為壓縮文件。優(yōu)選的,所述第一壓縮單元具體包括識別單元,用于根據(jù)所述資源文件的文件頭判斷所述資源文件是否為特定資源文件;第一壓縮子單元,用于在所述資源文件為特定資源文件時,通過與所述特定資源文件相匹配的特定壓縮算法進行壓縮編碼;第二壓縮子單元,用于在所述資源文件為非特定資源文件時,通過通用壓縮算法進行壓縮編碼。優(yōu)選的,所述第二壓縮單元具體包括匹配單元,用于判斷當(dāng)前待編碼字符是否與滑動窗內(nèi)的已編碼字符相匹配,所述當(dāng)前待編碼字符為所述滑動窗外的第一個未編碼字符;指針輸出單元,用于在所述匹配單元判斷為是時,繼續(xù)查找最長的匹配字符串,并輸出指針(off、len、c),在所述匹配單元判斷為否時,輸出指針(off、len、d),其中,off■表示所述匹配字符串相對滑動窗的窗口邊界的偏移量,Ien表示所述匹配字符串的長度,c為與所述匹配字符串相鄰的下一個字符,d表示所述當(dāng)前待編碼字符;移動單元,用于將所述滑動窗向后移動(len+Ι)個字符,通知所述匹配單元繼續(xù)匹配字符,直至將所有未編碼字符全部轉(zhuǎn)化為指向所述滑動窗的指針。優(yōu)選的,所述第二壓縮單元具體包括
映射單元,用于將所述字節(jié)碼包含的字符依次映射成9bit的編碼,所述9bit的編碼包括間隔符“I”以及該字符的8bit ASCII碼;編碼單元,用于在映射編碼過程中,如果存在與已映射編碼的字符相同的字符序列,則將所述字符序列編碼成指向所述已映射編碼的字符的指針和所述字符序列的長度。優(yōu)選的,根據(jù)字節(jié)碼的大小、字符序列出現(xiàn)的位置和字符序列的長度,設(shè)置所述字符序列編碼成的指針和長度的ASCII碼表示方式。優(yōu)選的,如果存在至少兩種所述指針和長度的ASCII碼表示方式,則所述編碼單元對所述字符序列的編碼還包括標(biāo)識位,所述標(biāo)識位用于表示采用的ASCII碼表示方式。本發(fā)明實施例的應(yīng)用的壓縮編碼方法及裝置,解析應(yīng)用的安裝包,提取其中較大的字節(jié)碼和資源文件,對二者分別采用不同的壓縮方式編碼,以期達到最大的壓縮比,應(yīng)用安裝包越小,在相同下載條件下,用戶花費的時間越短,需要支付的無線網(wǎng)絡(luò)數(shù)據(jù)流量費用越低。
為了更清楚地說明本申請實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請中記載的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,還可以根據(jù)這些附圖獲得其他的附圖。圖1是本發(fā)明實施例應(yīng)用的壓縮編碼方法的流程圖;圖2是本發(fā)明實施例中對資源文件進行壓縮編碼的流程圖;圖3是本發(fā)明實施例中對字節(jié)碼進行壓縮編碼實施例1的流程圖;圖4是本發(fā)明實施例中對字節(jié)碼進行壓縮編碼實施例2的流程圖;圖5是本發(fā)明實施例中對字節(jié)碼進行壓縮編碼實施例2的壓縮映射關(guān)系圖;圖6是本發(fā)明實施例應(yīng)用的壓縮編碼裝置的示意圖;圖7是本發(fā)明實施例中第一壓縮單元的示意圖;圖8是本發(fā)明實施例中第二壓縮單元實施例1的示意圖;圖9是本發(fā)明實施例中第二壓縮單元實施例2的示意圖。
具體實施例方式為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面結(jié)合附圖和實施方式對本發(fā)明實施例作進一步的詳細(xì)說明。參見圖1,示出了本發(fā)明實施例應(yīng)用的壓縮編碼方法的流程圖,包括步驟101,解析應(yīng)用的安裝包,獲取所述應(yīng)用的字節(jié)碼和資源文件。以Android應(yīng)用的安裝包為例,目前用戶從應(yīng)用商店下載的應(yīng)用安裝包,一般只是簡單地將可執(zhí)行代碼和資源文件組合在一起形成zip格式的壓縮包,壓縮比低,下載時間長。安裝包中的執(zhí)行程序是基于dalvik虛擬機的字節(jié)碼,Dalvik虛擬機則是基于寄存器的,指令一般較大;另外,安裝包中的資源文件格式又很多,不同格式的文件又具有各自的特點。考慮到上述因素,本發(fā)明實施例要對字節(jié)碼和資源文件這兩部分最占空間的文件分別進行壓縮編碼,通過與二者最匹配的壓縮算法最大程度的壓縮安裝包。因此,在得到一個安裝包之后,要先解析該安裝包獲取其包含的字節(jié)碼和資源文件,例如解析Android安裝包,大致可得到以下幾種文件classes. dex, AndroidManifest. xml (工程描述文件,在壓縮過程中可忽略),res和assets文件夾以及其它文件夾下的各種xml文件、圖片、視頻或者音頻等資源文件,其中classes, dex即為字節(jié)碼,xml文件、圖片、視頻或者音頻為資源文件,本發(fā)明即是對這兩種最占空間的文件進行壓縮。需要說明的是,為了進一步提高安裝包的壓縮比,在解析獲得字節(jié)碼后,可以通過baksmal1. jar工具將classes, dex文件轉(zhuǎn)換為dalvik文件。這主要是因為,Classes, dex文件是一種基于字節(jié)碼的二進制文件,dalvik文件則是文本文件,且dalvik文件更易于壓縮處理,因此在壓縮編碼之前可先進行文件格式轉(zhuǎn)換。步驟102,分別對所述字節(jié)碼和資源文件進行壓縮編碼,再組裝成形成壓縮文件;其中,利用LZ77算法對所述字節(jié)碼進行壓縮編碼。為了實現(xiàn)本發(fā)明目的,針對字節(jié)碼和資源文件采用不同的壓縮編碼方式,盡量提高二者的壓縮比,也就能提高由二者構(gòu)成的壓縮文件的壓縮比。下面分別對字節(jié)碼和資源文件的壓縮編碼過程進行解釋說明。對于資源文件來說,其可進一步細(xì)分為特定資源文件(例如圖片文件、視頻文件、音頻文件等)和非特定資源文件(例如XML文件、文本文件等),對于能區(qū)分識別出的特定資源文件,可以采用與其最為匹配的特定壓縮算法實現(xiàn)壓縮編碼過程,對于其它不能識別的非特定資源文件,則可采用通用算法對這部分文件實現(xiàn)壓縮編碼過程。參見圖2,示出了本發(fā)明實施例中對資源文件進行壓縮編碼的流程圖,可包括步驟201,根據(jù)資源文件的文件頭判斷所述資源文件是否為特定資源文件;步驟203,如果為特定資源文件,則通過與所述特定資源文件相匹配的特定壓縮算法進行壓縮編碼;步驟203,如果為非特定資源文件,則通過通用壓縮算法進行壓縮編碼。特定資源文件都有特定的文件頭標(biāo)識,因此通過文件頭就可對解析安裝包獲得的資源文件進行分類,如果是可識別的文件頭,則將其作為特定資源文件看待,否則將其視為非特定資源文件,對于非特定資源文件就可采用LZMA算法進行壓縮編碼。而對于特定文件資源來說,在進行上述初步分類之后,還可根據(jù)文件頭的具體類型進一步細(xì)分,例如細(xì)分為圖片文件、視頻文件或者音頻文件,則相應(yīng)的壓縮編碼方式可以為如果是圖片文件,則利用差分脈沖調(diào)制編碼、DEFLATE算法、LZW算法進行壓縮編碼;如果是視頻文件,則利用離散余弦變換以及運動補償預(yù)測技術(shù)進行壓縮編碼;如果是音頻文件,則利用子帶編碼、MDCT、感知模型(即壓縮感知)、低比特率量化、量化以及哈夫曼編碼進行壓縮編碼。需要說明的是,在壓縮資源文件時,也可以不對特定資源文件和非特定資源文件進行區(qū)別處理,而是對所有資源文件都采用相同的通用壓縮方式,例如采用LZW算法,同樣可以相對現(xiàn)有技術(shù)提高安裝包的壓縮比。對于字節(jié)碼來說,可以通過LZ77算法完成壓縮編碼過程,具體實現(xiàn)方式如下。參見圖3,示出了本發(fā)明實施例中對字節(jié)碼進行壓縮編碼實施例1的流程圖,可包括
步驟301,判斷當(dāng)前待編碼字符是否與滑動窗內(nèi)的已編碼字符相匹配,所述當(dāng)前待編碼字符為所述滑動窗外的第一個未編碼字符。步驟302,如果相匹配,則繼續(xù)查找最長的匹配字符串,并輸出指針(off、len、C),繼續(xù)執(zhí)行步驟304 ;其中,off表示所述匹配字符串相對滑動窗的窗口邊界的偏移量,Ien表示所述匹配字符串的長度,c為與所述匹配字符串相鄰的下一個字符。步驟303,如果未匹配,則輸出指針(off、len、d),其中d表示所述當(dāng)前待編碼字符,繼續(xù)執(zhí)行步驟304。步驟304,將所述滑動窗向后移動(len+Ι)個字符,繼續(xù)執(zhí)行步驟301,直至將所有未編碼字符全部轉(zhuǎn)化為指向所述滑動窗的指針。下面結(jié)合實例對上述編碼過程進行簡單介紹。若滑動窗的窗口大小為10個字符,窗內(nèi)已編碼的字符是abcdbbccaa,窗外未編碼的字符為abaeaaabaee,由上述情況可知,當(dāng)前待編碼字符為a,滑動窗內(nèi)存在與其相匹配的已編碼字符a,因此可以繼續(xù)查找是否存在更長的匹配字符串,經(jīng)比對發(fā)現(xiàn)窗外未編碼字符與窗內(nèi)已編碼字符之間最長的匹配字符串為ab,與該匹配字符串相鄰的下一個未編碼字符為a,因此可以輸出指針(0,2,a )。接著,將滑動窗向后移動3 (2+1 = 3)個字符,則窗內(nèi)已編碼字符為dbbccaaaba,窗外未編碼字符為eaaabaee,由此可知,當(dāng)前待編碼字符為e,經(jīng)比對發(fā)現(xiàn)窗內(nèi)已編碼字符中不存在與e相匹配的字符,因此可以輸出指針(0,0,e)。然后,將滑動窗向后移動I (0+1 = I)個字符,則窗內(nèi)已編碼字符為bbccaaabae,窗外未編碼字符為aaabaee,經(jīng)比對發(fā)現(xiàn)最長的匹配字符串為aaabae,因此可以輸出指針(4,6,e),至此就完成對所有未編碼字符的編碼過程。利用上述方法編碼之后,只需按順序記錄已編碼字符abcdbbccaa、指針三元組(0,2, a)、(0,0, e)、(4,6, e)即可,通過這種指針方式實現(xiàn)對文件數(shù)據(jù)的壓縮,相對逐個字符的壓縮文件來說,就可以大大提高文件的壓縮比。利用這種方式解壓的過程也很簡單,只要如上述壓縮過程一樣,維護好滑動的窗口,隨著指針三元組的不斷輸入,就可以在窗口中找到相應(yīng)的匹配字符串,綴上后繼字符c或者當(dāng)前待編碼字符d輸出即可還原出原始數(shù)據(jù)。根據(jù)上述示例體現(xiàn)的壓縮過程可知,偏移量off是隨著字符串的匹配情況而改變的,為了簡化壓縮編碼的過程,還可使偏移值off均勻分布,通過固定位數(shù)表示偏移量。位數(shù) bitnum = upper_bound (log2 (MAX_WND_SIZE)),其中 MAX_WND_SIZE 為滑動窗的窗口大小,如果窗口大小為4096,則用12位就可以對偏移編碼,如果窗口大小為2048,則用11位就可以對偏移編碼。這種通過固定位數(shù)偏移量進行壓縮編碼的過程與上述可變偏移量的編碼過程相同,此處不再贅述。參見圖4,示出了本發(fā)明實施例中對字節(jié)碼進行壓縮編碼實施例2的流程圖,可包括步驟401,將所述字節(jié)碼包含的字符依次映射成9bit的編碼,所述9bit的編碼包括間隔符“I”以及該字符的8bit ASCII碼。步驟402,在映射編碼過程中,如果存在與已映射編碼的字符相同的字符序列,則將所述字符序列編碼成指向所述已映射編碼的字符的指針和所述字符序列的長度。下面結(jié)合實例對上述編碼過程進行簡單介紹。
待編石馬文件為the brown fox jumped over the brown foxy jumping frog,文件的長度是53個八位組共計424bit (53*8bit = 424bit)。按照從左向右的順序?qū)ι鲜鑫募M行壓縮編碼。初始時,每個字符被映射成9bit的編碼,包括二進制的“ I ”(用于間隔每個字符映射的8bit ASCII碼)和該字符的8bit ASCII碼。在映射編碼過程中,要不斷查找判斷是否存在重復(fù)的序列,即待編碼的字符中是否有與已編碼字符相同的字符。當(dāng)發(fā)現(xiàn)一個重復(fù)字符時,并不直接對該重復(fù)字符編碼,而是繼續(xù)掃描直到該重復(fù)序列終止,也就是說在出現(xiàn)一次字符重復(fù)現(xiàn)象時,應(yīng)盡量包括盡可能多的字符。按照上述發(fā)現(xiàn)重復(fù)序列的過程,我們發(fā)現(xiàn)的第一個序列是the brown fox,對于這個序列不需要如上述將每個字符映射成9bit編碼,而是將其編碼成指向前一個已編碼序列的指針和重復(fù)序列的長度。前一個已編碼序列the brown fox出現(xiàn)在本重復(fù)序列的26個字符之前,序列長度是13個字符,因此可將其編碼成(26,13),或者采用ASCII碼表示的00011010 1101 (通過8bit表示指針,4bit表示序列長度,共計12bit)。接著,可以繼續(xù)壓縮文件的剩余部分“y”,將其映射成9bit的編碼。對于后續(xù)由一個空格和jump組成的序列,亦可按照上述指針和長度的方式進行編碼為(27,5),或者采用ASCII碼表示的00011011 0101(仍然是通過8bit表示指針,4bit表示序列長度)。最后,比對剩余的字符序列ing frog,發(fā)現(xiàn)已編碼字符中不存在重復(fù)序列,因此將其包含的每個字符映射成9bit編碼,最終完成對上述文件的編碼過程,可參見圖5所示的壓縮映射關(guān)系圖。利用本發(fā)明實施例提供的方法對文件進行壓縮后,壓縮形成的報文由35個9bit字符和兩個包含指針和長度的編碼組成,總長度為35*9+2*12 = 339bit,與原來未壓縮的長度為424bit的報文相比,壓縮比為1. 25。需要說明的是,在上述示例中采用的是8bit指針和4bit長度對重復(fù)序列進行的編碼,在實際應(yīng)用中,對重復(fù)字符序列編碼成的指針和長度所采用的ASCII碼表示方式可以有多種,這主要取決于字節(jié)碼的大小、字符序列出現(xiàn)的位置和字符序列的長度??梢愿鶕?jù)實際需要縮短或增加指針和長度的編碼位數(shù),例如可以為6bit指針和4bit長度、或者12bit指針和6bit長度,本發(fā)明對此不做限定,只要能準(zhǔn)確表示出重復(fù)的未編碼字符序列與重復(fù)的已編碼字符序列之間的偏移量以及重復(fù)字符序列的長度即可?;谏鲜隹赡軙嬖诙喾NASCII碼表示方式的情況,在對重復(fù)序列進行編碼時,還需要設(shè)置標(biāo)識位,通過標(biāo)識位明確當(dāng)前編碼采用的是哪種ASCII碼表示方式。例如,存在以下兩種編碼方式對重復(fù)字符序列編碼8bit指針和4bit長度、12bit指針和6bit長度,相應(yīng)地可以用2bit的首部來表示這兩種編碼方式,00表示Sbit指針和4bit長度,01表示12bit指針和6bit長度。仍以上述文件的編碼過程為例,對于the brown fox就會被編碼成00 00011010 1101(共計14bit),對于空格和jump則被編碼成00 00011011 0101,這樣上述文件壓縮形成的報文的總長度為35*9+2*14 = 343bit,與原來未壓縮的長度為424bit的報文相比,壓縮比為1.24。參見圖6,示出了本發(fā)明實施例應(yīng)用的壓縮編碼裝置的示意圖,包括解析單元601,用于解析應(yīng)用的安裝包,獲取所述應(yīng)用的字節(jié)碼和資源文件;第一壓縮單元602,用于對所述資源文件進行壓縮編碼;
第二壓縮單元603,用于利用LZ77算法對所述字節(jié)碼進行壓縮編碼;組裝單元604,用于組裝所述第一壓縮單元和第二壓縮單元輸出的文件為壓縮文件。第一壓縮單元和第二壓縮單元按照本發(fā)明方法對資源文件和字節(jié)碼進行壓縮編碼后,輸出到組裝單元,由組裝單元將二者組裝形成壓縮文件。用戶即可將其下載到手持的智能終端,由于按照本發(fā)明實施例形成的壓縮文件的壓縮比較高,因此可以大幅降低用戶的下載時間。需要說明的是,在用戶下載壓縮文件的同時,還會將壓縮該文件采用的編碼方式下發(fā)給智能終端,這樣終端就可通過壓縮算法的逆運算將壓縮文件還原成原始的應(yīng)用安裝包,無障礙的實現(xiàn)對應(yīng)用的下載和安裝。當(dāng)然,為了使用戶正常使用壓縮文件,本發(fā)明實施例的壓縮過程實現(xiàn)的是無損壓縮。參見圖7,示出了本發(fā)明實施例中第一壓縮單元的示意圖,包括識別單元701,用于根據(jù)所述資源文件的文件頭判斷所述資源文件是否為特定資源文件;第一壓縮子單元702,用于在所述資源文件為特定資源文件時,通過與所述特定資源文件相匹配的特定壓縮算法進行壓縮編碼;第二壓縮子單元703,用于在所述資源文件為非特定資源文件時,通過通用壓縮算法進行壓縮編碼。參見圖8,示出了本發(fā)明實施例中第二壓縮單元實施例1的示意圖,包括匹配單元801,用于判斷當(dāng)前待編碼字符是否與滑動窗內(nèi)的已編碼字符相匹配,所述當(dāng)前待編碼字符為所述滑動窗外的第一個未編碼字符;指針輸出單元802,用于在所述匹配單元判斷為是時,繼續(xù)查找最長的匹配字符串,并輸出指針(off、len、C),在所述匹配單元判斷為否時,輸出指針(off、len、d),其中,off表示所述匹配字符串相對滑動窗的窗口邊界的偏移量,Ien表示所述匹配字符串的長度,c為與所述匹配字符串相鄰的下一個字符,d表示所述當(dāng)前待編碼字符;移動單元803,用于將所述滑動窗向后移動(len+Ι)個字符,通知所述匹配單元繼續(xù)匹配字符,直至將所有未編碼字符全部轉(zhuǎn)化為指向所述滑動窗的指針。參見圖9,示出了本發(fā)明實施例中第二壓縮單元實施例2的示意圖,包括映射單元901,用于將所述字節(jié)碼包含的字符依次映射成9bit的編碼,所述9bit的編碼包括間隔符“I”以及該字符的8bit ASCII碼;編碼單元902,用于在映射編碼過程中,如果存在與已映射編碼的字符相同的字符序列,則將所述字符序列編碼成指向所述已映射編碼的字符的指針和所述字符序列的長度。本發(fā)明方案可以在由計算機執(zhí)行的計算機可執(zhí)行指令的一般上下文中描述,例如程序單元。一般地,程序單元包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計算環(huán)境中實踐本發(fā)明方案,在這些分布式計算環(huán)境中,由通過通信網(wǎng)絡(luò)而被連接的遠程處理設(shè)備來執(zhí)行任務(wù)。在分布式計算環(huán)境中,程序單元可以位于包括存儲設(shè)備在內(nèi)的本地和遠程計算機存儲介質(zhì)中。本說明書中的各個實施例均采用遞進的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對于裝置實施例而言,由于其基本相似于方法實施例,所以描述得比較簡單,相關(guān)之處參見方法實施例的部分說明即可。以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。以上對本發(fā)明實施例進行了詳細(xì)介紹,本文中應(yīng)用了具體實施方式
對本發(fā)明進行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及設(shè)備;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實施方式
及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。
權(quán)利要求
1.一種應(yīng)用的壓縮編碼方法,其特征在于,所述方法包括 解析應(yīng)用的安裝包,獲取所述應(yīng)用的字節(jié)碼和資源文件; 分別對所述字節(jié)碼和資源文件進行壓縮編碼,再組裝成形成壓縮文件;其中,利用LZ77算法對所述字節(jié)碼進行壓縮編碼。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,對所述資源文件進行壓縮編碼,具體包括 根據(jù)所述資源文件的文件頭判斷所述資源文件是否為特定資源文件; 如果為特定資源文件,則通過與所述特定資源文件相匹配的特定壓縮算法進行壓縮編碼; 如果為非特定資源文件,則通過通用壓縮算法進行壓縮編碼。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于, 所述特定資源文件為圖片文件、視頻文件或者音頻文件,則壓縮所述特定資源文件的方式包括 利用差分脈沖調(diào)制編碼、DEFLATE算法、LZff算法對所述圖片文件進行壓縮編碼; 利用離散余弦變換以及運動補償預(yù)測技術(shù)對所述視頻文件進行壓縮編碼; 利用子帶編碼、MDCT、感知模型、低比特率量化、量化以及哈夫曼編碼對所述音頻文件進行壓縮編碼; 所述非特定資源文件為XML文件或者文本文件,則所述通用壓縮算法為LZMA算法。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述利用LZ77算法對所述字節(jié)碼進行壓縮編碼,具體包括 判斷當(dāng)前待編碼字符是否與滑動窗內(nèi)的已編碼字符相匹配,所述當(dāng)前待編碼字符為所述滑動窗外的第一個未編碼字符; 如果相匹配,則繼續(xù)查找最長的匹配字符串,并輸出指針(off、len, c),其中,off表示所述匹配字符串相對滑動窗的窗口邊界的偏移量,Ien表示所述匹配字符串的長度,c為與所述匹配字符串相鄰的下一個字符;如果未匹配,則輸出指針(off、len, d),其中d表示所述當(dāng)前待編碼字符; 將所述滑動窗向后移動(len+1)個字符,繼續(xù)執(zhí)行所述判斷當(dāng)前待編碼字符是否與滑動窗內(nèi)的已編碼字符相匹配的步驟,直至將所有未編碼字符全部轉(zhuǎn)化為指向所述滑動窗的指針。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述利用LZ77算法對所述字節(jié)碼進行壓縮編碼,具體包括 將所述字節(jié)碼包含的字符依次映射成9bit的編碼,所述9bit的編碼包括間隔符“I”以及該字符的8bit ASCII碼; 在映射編碼過程中,如果存在與已映射編碼的字符相同的字符序列,則將所述字符序列編碼成指向所述已映射編碼的字符的指針和所述字符序列的長度。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于, 根據(jù)字節(jié)碼的大小、字符序列出現(xiàn)的位置和字符序列的長度,設(shè)置所述字符序列編碼成的指針和長度的ASCII碼表示方式。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,如果存在至少兩種所述指針和長度的ASCII碼表示方式,則所述字符序列的編碼還包括標(biāo)識位,所述標(biāo)識位用于表示采用的ASCII碼表不方式。
8.一種應(yīng)用的壓縮編碼裝置,其特征在于,所述裝置包括 解析單元,用于解析應(yīng)用的安裝包,獲取所述應(yīng)用的字節(jié)碼和資源文件; 第一壓縮單元,用于對所述資源文件進行壓縮編碼; 第二壓縮單元,用于利用LZ77算法對所述字節(jié)碼進行壓縮編碼; 組裝單元,用于組裝所述第一壓縮單元和第二壓縮單元輸出的文件為壓縮文件。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述第一壓縮單元具體包括 識別單元,用于根據(jù)所述資源文件的文件頭判斷所述資源文件是否為特定資源文件;第一壓縮子單元,用于在所述資源文件為特定資源文件時,通過與所述特定資源文件相匹配的特定壓縮算法進行壓縮編碼; 第二壓縮子單元,用于在所述資源文件為非特定資源文件時,通過通用壓縮算法進行壓縮編碼。
10.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述第二壓縮單元具體包括 匹配單元,用于判斷當(dāng)前待編碼字符是否與滑動窗內(nèi)的已編碼字符相匹配,所述當(dāng)前待編碼字符為所述滑動窗外的第一個未編碼字符; 指針輸出單元,用于在所述匹配單元判斷為是時,繼續(xù)查找最長的匹配字符串,并輸出指針(off、len、c),在所述匹配單元判斷為否時,輸出指針(off、len、d),其中,off表示所述匹配字符串相對滑動窗的窗口邊界的偏移量,Ien表示所述匹配字符串的長度,c為與所述匹配字符串相鄰的下一個字符,d表示所述當(dāng)前待編碼字符; 移動單元,用于將所述滑動窗向后移動(len+1)個字符,通知所述匹配單元繼續(xù)匹配字符,直至將所有未編碼字符全部轉(zhuǎn)化為指向所述滑動窗的指針。
11.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述第二壓縮單元具體包括 映射單元,用于將所述字節(jié)碼包含的字符依次映射成9bit的編碼,所述9bit的編碼包括間隔符“I”以及該字符的8bit ASCII碼; 編碼單元,用于在映射編碼過程中,如果存在與已映射編碼的字符相同的字符序列,則將所述字符序列編碼成指向所述已映射編碼的字符的指針和所述字符序列的長度。
12.根據(jù)權(quán)利要求11所述的裝置,其特征在于, 根據(jù)字節(jié)碼的大小、字符序列出現(xiàn)的位置和字符序列的長度,設(shè)置所述字符序列編碼成的指針和長度的ASCII碼表示方式。
13.根據(jù)權(quán)利要求12所述的裝置,其特征在于,如果存在至少兩種所述指針和長度的ASCII碼表示方式,則所述編碼單元對所述字符序列的編碼還包括標(biāo)識位,所述標(biāo)識位用于表不米用的ASCII碼表不方式。
全文摘要
一種應(yīng)用的壓縮編碼方法,所述方法包括解析應(yīng)用的安裝包,獲取所述應(yīng)用的字節(jié)碼和資源文件;分別對所述字節(jié)碼和資源文件進行壓縮編碼,再組裝成形成壓縮文件;其中,利用LZ77算法對所述字節(jié)碼進行壓縮編碼。對字節(jié)碼和資源文件分別采用不同的壓縮方式編碼,就能達到最大的壓縮比,應(yīng)用安裝包越小,在相同下載條件下,用戶花費的時間越短,需要支付的無線網(wǎng)絡(luò)數(shù)據(jù)流量費用越低。
文檔編號H03M7/30GK103023511SQ201210517940
公開日2013年4月3日 申請日期2012年12月5日 優(yōu)先權(quán)日2012年12月5日
發(fā)明者駱文平, 曹洪偉, 葛兵 申請人:云之朗科技有限公司, 北京恒信彩虹科技有限公司, 北京恒信彩虹信息技術(shù)有限公司