嵌入式設(shè)備內(nèi)存數(shù)據(jù)的快速無(wú)損壓縮方法
【專利摘要】本發(fā)明公開(kāi)了一種數(shù)據(jù)處理【技術(shù)領(lǐng)域】嵌入式設(shè)備內(nèi)存數(shù)據(jù)的快速無(wú)損壓縮方法,主要解決已有的壓縮方法對(duì)內(nèi)存頁(yè)面壓縮速度低的問(wèn)題。其主要特點(diǎn)是設(shè)計(jì)了兩種適合內(nèi)存頁(yè)面數(shù)據(jù)的壓縮格式:一種是首字節(jié)記錄字符重復(fù)長(zhǎng)度、偏移距離和新字符長(zhǎng)度,從第二個(gè)字節(jié)開(kāi)始依次記錄剩余的新字符長(zhǎng)度、新字符和剩余的偏移距離;第二種是首字節(jié)記錄壓縮格式標(biāo)志、偏移距離和新字符長(zhǎng)度,從第二個(gè)字節(jié)開(kāi)始依次記錄剩余的新字符長(zhǎng)度、新字符、字符重復(fù)長(zhǎng)度和剩余的偏移距離。本發(fā)明與目前的LZO無(wú)損壓縮方法相比,提高了內(nèi)存頁(yè)面數(shù)據(jù)的壓縮與解壓縮速度,并得到更好的壓縮率,從而提高了嵌入式設(shè)備的內(nèi)存數(shù)據(jù)存儲(chǔ)容量和利用率,可用于存儲(chǔ)受限的嵌入式設(shè)備。
【專利說(shuō)明】嵌入式設(shè)備內(nèi)存數(shù)據(jù)的快速無(wú)損壓縮方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于數(shù)據(jù)處理【技術(shù)領(lǐng)域】,涉及嵌入式設(shè)備內(nèi)存數(shù)據(jù)的數(shù)據(jù)壓縮方法,本發(fā) 明在數(shù)據(jù)壓縮時(shí)根據(jù)內(nèi)存數(shù)據(jù)的特征采用新的數(shù)據(jù)壓縮格式提高了壓縮的速度,可用在存 儲(chǔ)受限的嵌入式設(shè)備中。
【背景技術(shù)】
[0002] 內(nèi)存是計(jì)算機(jī)的重要部件之一,它是與CPU進(jìn)行溝通的橋梁。計(jì)算機(jī)中所有程序 的運(yùn)行都是在內(nèi)存中進(jìn)行的。內(nèi)存的性能對(duì)計(jì)算機(jī)的影響很大,而在體積、存儲(chǔ)容量受限的 嵌入式便攜設(shè)備中,內(nèi)存對(duì)設(shè)備性能和用戶體驗(yàn)的影響尤為突出。近些年來(lái),隨著移動(dòng)互聯(lián) 網(wǎng)的發(fā)展,嵌入式便攜設(shè)備如手機(jī)、平板電腦等已經(jīng)成為人們必備的一種通信工具。因此對(duì) 內(nèi)存數(shù)據(jù)進(jìn)行壓縮,挺高內(nèi)存存儲(chǔ)能力和利用率將大大提高設(shè)備的整體性能。隨著社會(huì)發(fā) 展,信息量不斷增長(zhǎng),人們對(duì)嵌入式設(shè)備的系統(tǒng)性能也提出了更高的要求,如更高的速度、 更低的耗能、更小的體積、能存取更多的信息等等。為了達(dá)到上面的各種性能要求,人們提 出了各種改進(jìn)的方法。相較于高額的硬件技術(shù)的突破,更加快速有效的方法之一就是無(wú)損 數(shù)據(jù)壓縮技術(shù)。如若在嵌入式設(shè)備中運(yùn)用無(wú)損數(shù)據(jù)壓縮技術(shù),則可以在相同的硬件存儲(chǔ)空 間中存取更多的數(shù)據(jù),提高內(nèi)存利用率,降低成本,挺高設(shè)備性能和用戶體驗(yàn)。鑒于上述技 術(shù)的各種優(yōu)點(diǎn),運(yùn)用這種簡(jiǎn)單而廉價(jià)的改進(jìn)嵌入式系統(tǒng)性能的技術(shù),研究無(wú)損數(shù)據(jù)壓縮技 術(shù)是很有必要的。
[0003] Lempel和Ziv于1977年提出了一種高效率的無(wú)失真壓縮技術(shù),即LZ77無(wú)損數(shù)據(jù) 壓縮算法,該壓縮算法的主要原理是利用較短的標(biāo)記代表前面出現(xiàn)過(guò)的重復(fù)字串,標(biāo)記格 式為重復(fù)長(zhǎng)度,偏移距離,如abcdekabcdeha,則可以編碼成abcdek(5, 6)ha表不,這樣從整 體上而言,較短的信息代替較長(zhǎng)的信息,從而達(dá)到了壓縮的效果。1982年,JamesStorer和 ThomasSzymanski在LZ77基礎(chǔ)上將算法進(jìn)行改進(jìn)提出了LZSS算法,提高了壓縮效率。后 來(lái)Lempel-Ziv-Oberhumer又在LZSS的基礎(chǔ)上將算法進(jìn)行改進(jìn)提出了LZ0算法,極大地提 高了壓縮編碼速度。LZ0算法是一種基于字典的無(wú)損的數(shù)據(jù)壓縮算法,具有壓縮速度快、即 時(shí)性的特點(diǎn)。該算法根據(jù)不同的重復(fù)長(zhǎng)度和偏移距離設(shè)計(jì)了五種數(shù)據(jù)壓縮格式,編碼端按 照匹配對(duì),即重復(fù)長(zhǎng)度,偏移距離的大小選擇某一種壓縮格式編碼,解碼端通過(guò)壓縮格式的 首字節(jié)大小區(qū)分這五種不同的格式,最大的偏移距離可以達(dá)到48K。該方法存在的不足之處 是,自內(nèi)存"分頁(yè)機(jī)制"提出之始,內(nèi)存頁(yè)面的默認(rèn)大小便被設(shè)置為4096字節(jié),即4KB。雖然 在原則上計(jì)算機(jī)的內(nèi)存頁(yè)面大小是可配置的,但絕大多數(shù)的操作系統(tǒng)在實(shí)現(xiàn)中仍然采用默 認(rèn)的4KB頁(yè)面。為便于內(nèi)存數(shù)據(jù)管理,應(yīng)對(duì)內(nèi)存數(shù)據(jù)采用逐頁(yè)壓縮的方式,而LZ0初始設(shè)計(jì) 目的是壓縮長(zhǎng)度不定的數(shù)據(jù),它在壓縮內(nèi)存數(shù)據(jù)時(shí),只能取得很低的壓縮率,不能有效的提 高內(nèi)存利用率,并且壓縮與解壓縮速度都很慢。因此對(duì)于內(nèi)存數(shù)據(jù),用目前的LZ0的壓縮方 式和壓縮格式都不能適用。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明的目的在于克服上述已有技術(shù)的不足,提出了一種嵌入式設(shè)備內(nèi)存數(shù)據(jù)的 快速無(wú)損壓縮方法,以能夠更快速的壓縮與解壓縮內(nèi)存數(shù)據(jù),從而有效提高內(nèi)存存儲(chǔ)能力 和利用率。
[0005] 實(shí)現(xiàn)本發(fā)明的技術(shù)方案是:根據(jù)內(nèi)存頁(yè)面的數(shù)據(jù)特征,設(shè)計(jì)一種適合內(nèi)存頁(yè)面的 壓縮格式,針對(duì)內(nèi)存頁(yè)面數(shù)據(jù)進(jìn)行壓縮編碼,具體步驟包括如下:
[0006] (1)讀取嵌入式設(shè)備中內(nèi)存數(shù)據(jù)的一個(gè)內(nèi)存頁(yè)面,即按4KB的頁(yè)面大小逐頁(yè)讀取 內(nèi)存頁(yè)面;
[0007] (2)判斷所讀頁(yè)面的數(shù)據(jù)是否為新數(shù)據(jù),若所讀數(shù)據(jù)未記錄在字典中,則判斷為新 數(shù)據(jù),并把新數(shù)據(jù)位置記入字典中,繼續(xù)讀取內(nèi)存頁(yè)面數(shù)據(jù),直到未出現(xiàn)新數(shù)據(jù)為止;
[0008] 所述字典是根據(jù)關(guān)鍵值直接訪問(wèn)的哈希表結(jié)構(gòu),該關(guān)鍵值是通過(guò)哈希函數(shù)計(jì)算得 出;
[0009] (3)對(duì)已記錄在字典中的所讀數(shù)據(jù),根據(jù)字符重復(fù)長(zhǎng)度和偏移距離,即字符當(dāng)前位 置與哈希表內(nèi)記錄位置之間的距離,選用不同的壓縮格式進(jìn)行編碼:
[0010] 對(duì)于字符重復(fù)長(zhǎng)度小于8,且偏移距離小于等于2KB的內(nèi)存頁(yè)面數(shù)據(jù),其首字節(jié)記 錄字符重復(fù)長(zhǎng)度L、偏移距離D和新字符長(zhǎng)度S;從第二個(gè)字節(jié)開(kāi)始依次記錄剩余的新字符 長(zhǎng)度M、新字符C和剩余的偏移距離N;
[0011] 對(duì)于不滿足字符重復(fù)長(zhǎng)度小于8,且偏移距離小于等于2KB的內(nèi)存頁(yè)面數(shù)據(jù),其首 字節(jié)記錄壓縮格式標(biāo)志T、偏移距離D和新字符長(zhǎng)度S;從第二個(gè)字節(jié)開(kāi)始依次記錄剩余的 新字符長(zhǎng)度M、新字符C、字符重復(fù)長(zhǎng)度L和剩余的偏移距離N;
[0012] (4)判斷編碼位置是否為當(dāng)前讀入內(nèi)存頁(yè)面結(jié)尾,若是,則輸出壓縮后的數(shù)據(jù)和數(shù) 據(jù)的長(zhǎng)度,并記錄結(jié)束標(biāo)志,執(zhí)行步驟(5),否則,返回步驟(2),繼續(xù)讀入新數(shù)據(jù);
[0013] (5)判斷當(dāng)前頁(yè)面是否為內(nèi)存數(shù)據(jù)包的最后一個(gè)內(nèi)存頁(yè)面,若是,則編碼結(jié)束,否 貝U,返回步驟(1)讀入下一個(gè)內(nèi)存頁(yè)面。
[0014] 本發(fā)明由于所采用的壓縮格式簡(jiǎn)單,從而提高了內(nèi)存頁(yè)面數(shù)據(jù)的壓縮與解壓縮速 度,并得到更好的壓縮率,能夠較大幅提高嵌入式設(shè)備的內(nèi)存數(shù)據(jù)存儲(chǔ)容量和利用率。
[0015] 測(cè)試結(jié)果表明:本發(fā)明與目前的LZ0無(wú)損壓縮方法相比,其壓縮時(shí)間提高了 14. 52%,解壓縮時(shí)間提高了 98. 84%,壓縮率提高了 1. 1%。
【專利附圖】
【附圖說(shuō)明】
[0016]圖1是本發(fā)明的壓縮流程圖;
[0017] 圖2是本發(fā)明中的壓縮格式圖。
【具體實(shí)施方式】
[0018] 下面結(jié)合圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)描述:
[0019] 參照?qǐng)D1,本發(fā)明的實(shí)現(xiàn)步驟如下:
[0020] 步驟1 :從嵌入式設(shè)備的內(nèi)存數(shù)據(jù)包中讀入一個(gè)內(nèi)存頁(yè)面,即按4KB的頁(yè)面大小逐 頁(yè)讀取內(nèi)存頁(yè)面。
[0021] 步驟2 :從所讀內(nèi)存頁(yè)面讀入四個(gè)字符,做第一次哈希運(yùn)算,即通過(guò)第一個(gè)哈希函 數(shù)計(jì)算得出關(guān)鍵值,該哈希函數(shù)為目前的LZ0無(wú)損壓縮方法中的第一個(gè)哈希函數(shù)。
[0022] 步驟3 :根據(jù)步驟2中關(guān)鍵值判斷字符的位置是否合法,若合法,則進(jìn)入步驟4,若 不合法,則更新哈希表,該哈希表是根據(jù)關(guān)鍵值直接訪問(wèn)的數(shù)據(jù)結(jié)構(gòu),再返回步驟2。
[0023] 所述的合法,是指哈希表中所存的每一個(gè)位置都只能根據(jù)一個(gè)關(guān)鍵值訪問(wèn)。
[0024] 步驟4:判斷當(dāng)前哈希表所存位置中的字符是否與讀入字符相同,若相同,則進(jìn)入 步驟7,若不相同,則進(jìn)入步驟5。
[0025] 所述的當(dāng)前哈希表所存位置,是指根據(jù)步驟2中關(guān)鍵值直接訪問(wèn)的哈希表所存的 一個(gè)位置。
[0026] 步驟5:用步驟2中得到的關(guān)鍵值做第二次哈希運(yùn)算,即通過(guò)第二個(gè)哈希函數(shù)計(jì)算 得出第二個(gè)關(guān)鍵值,該哈希函數(shù)為目前的LZ0無(wú)損壓縮方法中的第二個(gè)哈希函數(shù);再根據(jù) 第二個(gè)關(guān)鍵值判斷字符位置是否合法,若合法,則進(jìn)入步驟6,若不合法,則更新哈希表,返 回步驟2。
[0027] 步驟6:判斷該哈希表所存地址中的字符是否與讀入字符相同,若相同,則進(jìn)入步 驟7,若不相同,則判定讀入字符為新字符C,并更新哈希表,返回步驟2。
[0028] 所述的哈希表所存地址,是指根據(jù)步驟5中第二個(gè)關(guān)鍵值直接訪問(wèn)的哈希表所存 的一個(gè)地址。
[0029] 步驟7 :計(jì)算新字符長(zhǎng)度S、字符重復(fù)長(zhǎng)度L和偏移距離D,即字符當(dāng)前位置與哈希 表內(nèi)記錄位置之間的距離。
[0030] 該計(jì)算方法與目前的LZ0無(wú)損壓縮方法中的計(jì)算方法相同。
[0031] 步驟8 :判斷字符重復(fù)長(zhǎng)度是否小于8且偏移距離是否小于等于2KB,若是,則執(zhí)行 步驟9;若不是,則執(zhí)行步驟10。
[0032] 步驟9 :將字符按壓縮格式1的記錄規(guī)則進(jìn)行編碼。
[0033]參照?qǐng)D2(a),本步驟按照壓縮格式1的記錄規(guī)則進(jìn)行編碼的步驟如下:
[0034] 9. 1)首字節(jié)的前3位記錄字符重復(fù)長(zhǎng)度L,首字節(jié)的第4、第5、第6位記錄偏移距 離D的后3比特,即每一位記錄1比特;
[0035] 9. 2)判斷新字符長(zhǎng)度S是否大于3,若不是,則首字節(jié)的最后2位記錄新字符長(zhǎng) 度S,并從第二個(gè)字節(jié)開(kāi)始記錄新字符C;若是,則首字節(jié)的最后2位記錄為0作為標(biāo)志,并 用新字符長(zhǎng)度S減3,得到剩余的新字符長(zhǎng)度M,再判斷剩余的新字符長(zhǎng)度M是否大于255, 若不是,則記錄剩余的新字符長(zhǎng)度M,若是,則記錄一個(gè)字節(jié)0,并用剩余的新字符長(zhǎng)度M減 255,直到剩余的新字符長(zhǎng)度小于255,記錄該剩余的新字符長(zhǎng)度,再記錄新字符C;
[0036] 9. 3)記錄新字符完成之后,記錄剩余的偏移距離N,該剩余的偏移距離N是偏移距 離D的前8比特;然后進(jìn)入步驟11。
[0037] 步驟10:將字符按壓縮格式2的記錄規(guī)則進(jìn)行編碼。
[0038]參照?qǐng)D2(b),本步驟按照壓縮格式2的記錄規(guī)則進(jìn)行編碼的步驟如下:
[0039] 10. 1)首字節(jié)的前2位記錄為01作為壓縮格式標(biāo)志T,即第1位記錄為0,第2位 記錄為1,首字節(jié)的第3、第4、第5、第6位記錄偏移距離D的后4比特,即每一位記錄1比 特。
[0040] 10. 2)判斷新字符長(zhǎng)度S是否大于3,若不是,則首字節(jié)的最后2位記錄新字符長(zhǎng) 度S,即每一位記錄1比特,并從第二個(gè)字節(jié)開(kāi)始記錄新字符;若是,則首字節(jié)的最后2位記 錄為〇作為標(biāo)志,并用新字符長(zhǎng)度S減3,得到剩余的新字符長(zhǎng)度M,再判斷剩余的新字符長(zhǎng) 度M是否大于255,若不是,則記錄剩余的新字符長(zhǎng)度M,若是,則記錄一個(gè)字節(jié)0,并用剩余 的新字符長(zhǎng)度M減255,直到剩余的新字符長(zhǎng)度小于255,記錄該剩余的新字符長(zhǎng)度,再記錄 新字符C;
[0041] 10. 3)記錄新字符完成之后,判斷字符重復(fù)長(zhǎng)度L是否大于255,若不是,則記錄字 符重復(fù)長(zhǎng)度L,若是,則記錄一個(gè)字節(jié)0,并用字符重復(fù)長(zhǎng)度L減255,直到字符重復(fù)長(zhǎng)度小于 255,記錄該字符重復(fù)長(zhǎng)度;
[0042] 10. 4)記錄字符重復(fù)長(zhǎng)度完成之后,記錄剩余的偏移距離N,該剩余的偏移距離N 為偏移距離D的前8比特。
[0043] 步驟11:判斷編碼位置是否與當(dāng)前讀入內(nèi)存頁(yè)面結(jié)尾位置相同,若相同,則輸出 編碼后的數(shù)據(jù)和數(shù)據(jù)的長(zhǎng)度,并記錄結(jié)束標(biāo)志,然后進(jìn)入步驟12,若不相同,則返回步驟2。
[0044] 所述的結(jié)束標(biāo)志,是指記錄三個(gè)字節(jié)的數(shù)據(jù),即第1個(gè)字節(jié)記錄為17,第2和第3 個(gè)字節(jié)都記錄為0。
[0045] 步驟12:判斷當(dāng)前內(nèi)存頁(yè)面是否為內(nèi)存數(shù)據(jù)包的最后一個(gè)內(nèi)存頁(yè)面,即嵌入式設(shè) 備的內(nèi)存數(shù)據(jù)包中的所有數(shù)據(jù)是否都已經(jīng)被讀取,若是,則編碼結(jié)束,若不是,則返回步驟 1〇
[0046] 下面結(jié)合實(shí)驗(yàn)對(duì)本發(fā)明的效果做進(jìn)一步說(shuō)明:
[0047] 本實(shí)驗(yàn)采用C語(yǔ)言來(lái)編寫發(fā)明所提出的壓縮方法,通過(guò)比較本發(fā)明與目前的LZ0 無(wú)損壓縮方法對(duì)內(nèi)存頁(yè)面數(shù)據(jù)的壓縮效果,來(lái)說(shuō)明本發(fā)明方法壓縮與解壓縮速度的優(yōu)點(diǎn)。 LZ0是目前最好的無(wú)損壓縮方法。本實(shí)驗(yàn)所采用的內(nèi)存數(shù)據(jù)為典型移動(dòng)設(shè)備的4KB大小的 內(nèi)存頁(yè)面數(shù)據(jù),實(shí)驗(yàn)使用數(shù)據(jù)為內(nèi)存頁(yè)面數(shù)據(jù)包,數(shù)據(jù)包大小為453MB。在VS2010程序開(kāi) 發(fā)環(huán)境中,分別用本發(fā)明和目前的LZ0無(wú)損壓縮方法壓縮內(nèi)存頁(yè)面數(shù)據(jù),實(shí)驗(yàn)結(jié)果如表1所 示:
[0048]表1
[0049]
【權(quán)利要求】
1. 一種嵌入式設(shè)備內(nèi)存數(shù)據(jù)的快速無(wú)損壓縮方法,包括如下步驟: (1) 讀取嵌入式設(shè)備中內(nèi)存數(shù)據(jù)的一個(gè)內(nèi)存頁(yè)面,即按4KB的頁(yè)面大小逐頁(yè)讀取內(nèi)存 頁(yè)面; (2) 判斷所讀頁(yè)面的數(shù)據(jù)是否為新數(shù)據(jù),若所讀數(shù)據(jù)未記錄在字典中,則判斷為新數(shù) 據(jù),并把新數(shù)據(jù)位置記入字典中,繼續(xù)讀取內(nèi)存頁(yè)面數(shù)據(jù),直到未出現(xiàn)新數(shù)據(jù)為止; 所述字典是根據(jù)關(guān)鍵值直接訪問(wèn)的哈希表結(jié)構(gòu),該關(guān)鍵值是通過(guò)哈希函數(shù)計(jì)算得出; (3) 對(duì)已記錄在字典中的所讀數(shù)據(jù),根據(jù)字符重復(fù)長(zhǎng)度和偏移距離,即字符當(dāng)前位置與 哈希表內(nèi)記錄位置之間的距離,選用不同的壓縮格式進(jìn)行編碼: 對(duì)于字符重復(fù)長(zhǎng)度小于8,且偏移距離小于等于2KB的內(nèi)存頁(yè)面數(shù)據(jù),其首字節(jié)記錄字 符重復(fù)長(zhǎng)度L、偏移距離D和新字符長(zhǎng)度S ;從第二個(gè)字節(jié)開(kāi)始依次記錄剩余的新字符長(zhǎng)度 M、新字符C和剩余的偏移距離N ; 對(duì)于不滿足字符重復(fù)長(zhǎng)度小于8,且偏移距離小于等于2KB的內(nèi)存頁(yè)面數(shù)據(jù),其首字節(jié) 記錄壓縮格式標(biāo)志T、偏移距離D和新字符長(zhǎng)度S ;從第二個(gè)字節(jié)開(kāi)始依次記錄剩余的新字 符長(zhǎng)度M、新字符C、字符重復(fù)長(zhǎng)度L和剩余的偏移距離N ; (4) 判斷編碼位置是否為當(dāng)前讀入內(nèi)存頁(yè)面結(jié)尾,若是,則輸出壓縮后的數(shù)據(jù)和數(shù)據(jù)的 長(zhǎng)度,并記錄結(jié)束標(biāo)志,執(zhí)行步驟(5),否則,返回步驟(2),繼續(xù)讀入新數(shù)據(jù); (5) 判斷當(dāng)前頁(yè)面是否為內(nèi)存數(shù)據(jù)包的最后一個(gè)內(nèi)存頁(yè)面,若是,則編碼結(jié)束,否則,返 回步驟(1)讀入下一個(gè)內(nèi)存頁(yè)面。
2. 根據(jù)權(quán)利要求1所述的嵌入式設(shè)備內(nèi)存數(shù)據(jù)的快速無(wú)損壓縮方法,其特征在于:步 驟(3)所述的首字節(jié)記錄字符重復(fù)長(zhǎng)度L、偏移距離D和新字符長(zhǎng)度S,按如下規(guī)則記錄: 首字節(jié)的前3位記錄字符重復(fù)長(zhǎng)度L,L〈8 ; 首字節(jié)的第4、第5、第6位記錄偏移距離D的后3比特,即每一位記錄1比特; 判斷新字符長(zhǎng)度S是否大于3,若不是,則首字節(jié)的最后2位記錄新字符長(zhǎng)度S,即每一 位記錄1比特,若是,則首字節(jié)的最后2位記錄為0作為標(biāo)志,并用新字符長(zhǎng)度S減3,得到 剩余的新字符長(zhǎng)度M。
3. 根據(jù)權(quán)利要求1所述的嵌入式設(shè)備內(nèi)存數(shù)據(jù)的快速無(wú)損壓縮方法,其特征在于:步 驟(3)所述的從第二個(gè)字節(jié)開(kāi)始依次記錄剩余的新字符長(zhǎng)度M、新字符C和剩余的偏移距離 N,按如下規(guī)則記錄: 判斷剩余的新字符長(zhǎng)度M是否大于255,若不是,則記錄剩余的新字符長(zhǎng)度M,若是,則 記錄一個(gè)字節(jié)0,并用剩余的新字符長(zhǎng)度M減255,直到剩余的新字符長(zhǎng)度小于255,記錄該 剩余的新字符長(zhǎng)度,再記錄新字符C ; 記錄新字符完成之后,記錄剩余的偏移距離N,該剩余的偏移距離N是偏移距離D的前 8比特。
4. 根據(jù)權(quán)利要求1所述的嵌入式設(shè)備內(nèi)存數(shù)據(jù)的快速無(wú)損壓縮方法,其特征在于:步 驟(3)所述的首字節(jié)記錄壓縮格式標(biāo)志T、偏移距離D和新字符長(zhǎng)度S,按如下規(guī)則記錄: 首字節(jié)的前2位記錄為01作為壓縮格式標(biāo)志T,即第1位記錄為0,第2位記錄為1 ; 首字節(jié)的第3、第4、第5、第6位記錄偏移距離D的后4比特,即每一位記錄1比特; 判斷新字符長(zhǎng)度S是否大于3,若不是,則首字節(jié)的最后2位記錄新字符長(zhǎng)度S,即每一 位記錄1比特,若是,則首字節(jié)的最后2位記錄為0作為標(biāo)志,并用新字符長(zhǎng)度S減3,得到 剩余的新字符長(zhǎng)度M。
5.根據(jù)權(quán)利要求1所述的嵌入式設(shè)備內(nèi)存數(shù)據(jù)的快速無(wú)損壓縮方法,其特征在于:步 驟(3)所述的從第二個(gè)字節(jié)開(kāi)始依次記錄剩余的新字符長(zhǎng)度M、新字符C、字符重復(fù)長(zhǎng)度L 和剩余的偏移距離N,按如下規(guī)則記錄: 判斷剩余的新字符長(zhǎng)度M是否大于255,若不是,則記錄剩余的新字符長(zhǎng)度M,若是,則 記錄一個(gè)字節(jié)0,并用剩余的新字符長(zhǎng)度M減255,直到剩余的新字符長(zhǎng)度小于255,記錄該 剩余的新字符長(zhǎng)度,再記錄新字符C ; 記錄新字符完成之后,判斷字符重復(fù)長(zhǎng)度L是否大于255,若不是,則記錄字符重復(fù)長(zhǎng) 度L,若是,則記錄一個(gè)字節(jié)0,并用字符重復(fù)長(zhǎng)度L減255,直到字符重復(fù)長(zhǎng)度小于255,記 錄該字符重復(fù)長(zhǎng)度; 記錄字符重復(fù)長(zhǎng)度完成之后,記錄剩余的偏移距離N,該剩余的偏移距離N為偏移距離 D的前8比特。
【文檔編號(hào)】H03M7/30GK104410424SQ201410696377
【公開(kāi)日】2015年3月11日 申請(qǐng)日期:2014年11月26日 優(yōu)先權(quán)日:2014年11月26日
【發(fā)明者】宋彬, 李慧玲, 秦浩, 裴遠(yuǎn) 申請(qǐng)人:西安電子科技大學(xué)