郝雪燕
摘要:信息時(shí)代帶來了“信息爆炸”,海量數(shù)據(jù)的產(chǎn)生給系統(tǒng)運(yùn)行帶來極大的壓力,僅僅依靠計(jì)算機(jī)的硬件設(shè)備漸漸有些難以容下海量數(shù)據(jù)文件,壓縮文件可以在一定程度上節(jié)約空間,以便使用者在有限的空間存儲(chǔ)更多的文件。數(shù)據(jù)組織方式不同,數(shù)據(jù)量不同,但是信息量基本相同,為了節(jié)省數(shù)據(jù)存儲(chǔ)空間或者提升信息的傳遞效率,把數(shù)據(jù)結(jié)構(gòu)理論與算法應(yīng)用到數(shù)據(jù)壓縮中,已經(jīng)變得越來越重要。本文設(shè)計(jì)了一個(gè)基于無損壓縮技術(shù)的文件壓縮與解壓系統(tǒng),經(jīng)過測(cè)試,成功壓縮和還原了源文件,實(shí)現(xiàn)了預(yù)期目標(biāo)。
關(guān)鍵字:無損壓縮;文件壓縮;解壓
引言
數(shù)據(jù)是信息的載體,數(shù)據(jù)壓縮是信息量基本不變的情況下,降低數(shù)據(jù)量的核心技術(shù)。所謂數(shù)據(jù)壓縮技術(shù),顧名思義就是壓縮數(shù)據(jù)存儲(chǔ)占據(jù)的空間,以實(shí)現(xiàn)便于傳輸、處理以及節(jié)省儲(chǔ)存空間的目的。如果丟失個(gè)別的數(shù)據(jù)不會(huì)造成太大的影響,這時(shí)忽略它們是個(gè)好主意,這就是有損壓縮。有損壓縮廣泛應(yīng)用于動(dòng)畫、聲音和圖像文件中,典型的代表就是影碟文件格式MPEG、音樂文件格式MP3和圖像文件格式JPG。而無損壓縮是相對(duì)于有損壓縮來講的,無損壓縮方式的特點(diǎn)在于可以最大限度地保持?jǐn)?shù)據(jù)的完整性。
數(shù)據(jù)壓縮技術(shù)主要通過以下兩種方式來實(shí)現(xiàn):一種是壓縮數(shù)據(jù)空間;另一種是依靠算法實(shí)現(xiàn)原始數(shù)據(jù)的重整以精簡(jiǎn)空間。數(shù)據(jù)壓縮技術(shù)本質(zhì)上是一種編碼技術(shù),換言之,是利用不同的數(shù)據(jù)組織方式表達(dá)相同的含義、攜載基本相同的信息量。從源文件到編碼文件的映射過程就是數(shù)據(jù)編碼,類似于文本、圖像、聲音等等形式的源文件在計(jì)算機(jī)中都是以二進(jìn)制的形式存儲(chǔ)的,不同之處在于不同形式的源文件具體的二進(jìn)制表示方法不同。
1 數(shù)據(jù)壓縮算法
無損數(shù)據(jù)壓縮適用于文本文件、數(shù)據(jù)庫(kù)、程序等數(shù)據(jù)壓縮, 其特點(diǎn)是數(shù)據(jù)經(jīng)過壓縮和解壓后,可以完全與壓縮前的數(shù)據(jù)一樣。無損數(shù)據(jù)壓縮算法按照壓縮模型主要分為兩類:基于統(tǒng)計(jì)壓縮算法和基于字典壓縮算法?;诮y(tǒng)計(jì)壓縮算法主要包括:游程長(zhǎng)度編碼、哈夫曼編碼、算術(shù)編碼;基于字典的壓縮算法主要包括:LZ77算法、LZ78算法、LZW算法和LZSS算法。就當(dāng)前的技術(shù)而言,使用無損壓縮最大可以將數(shù)據(jù)文件的大小減少1/2-3/4。目前使用最為廣泛的壓縮技術(shù)是LZW和哈夫曼這兩大類壓縮算法,本文采用的是哈夫曼編碼技術(shù)。
哈夫曼編碼是最為傳統(tǒng)和典型的無損壓縮技術(shù)。算法的原理為:用二進(jìn)制的方式來表示每一個(gè)符號(hào),數(shù)據(jù)的長(zhǎng)度表示為某些特殊符號(hào)出現(xiàn)的頻率次數(shù)。對(duì)于經(jīng)常使用的符號(hào),選擇的二進(jìn)制就短一些,而一些使用頻率較低的符號(hào)則可以適當(dāng)?shù)丶娱L(zhǎng)。哈夫曼算法可以確保字符的二進(jìn)制編碼情況已經(jīng)將數(shù)據(jù)空間壓縮到極致,任何修改都難以對(duì)其空間進(jìn)行進(jìn)一步壓縮。但是該算法并沒有將符號(hào)之間的排列順序、重復(fù)出現(xiàn)等情況作為處理的重點(diǎn)。根據(jù)ASCII碼的規(guī)定,一個(gè)字符由8個(gè)比特表示,但是如果提前知道了文件中各個(gè)字符出現(xiàn)的頻率,就可以對(duì)這些字符重新編碼。
哈夫曼編碼的使用過程主要如下:第一步就是對(duì)整個(gè)原始文件進(jìn)行掃描,統(tǒng)計(jì)每個(gè)字符的頻率,然后根據(jù)頻率建立哈夫曼樹,由哈夫曼樹構(gòu)造得到每個(gè)字符的編碼。由于頻率高的字符在哈夫曼樹中離根更近,它們的哈夫曼編碼長(zhǎng)度更短;相反,頻率低的字符的編碼更長(zhǎng)。最后,用哈夫曼編碼替換原文件中的字符。
2 數(shù)據(jù)解壓算法
解壓是壓縮的逆過程,不同的壓縮算法對(duì)應(yīng)特定的解壓算法,也就是說,數(shù)據(jù)是怎么壓縮的,那么就怎么解壓。因此,進(jìn)行數(shù)據(jù)壓縮時(shí)就要提前考慮解壓的實(shí)現(xiàn)。比如,進(jìn)行哈夫曼編碼壓縮數(shù)據(jù)時(shí)要使用一個(gè)哈夫曼樹將數(shù)據(jù)轉(zhuǎn)換為對(duì)應(yīng)編碼,那么壓縮時(shí)就要存儲(chǔ)這顆編碼樹,解壓時(shí)根據(jù)存儲(chǔ)的信息重新構(gòu)建出這顆編碼樹,將編碼轉(zhuǎn)換為對(duì)應(yīng)的數(shù)據(jù)。在進(jìn)行解壓時(shí)第一步就是從相應(yīng)的文件中獲得數(shù)據(jù)壓縮時(shí)的一些重要信息,通過這些信息重現(xiàn)壓縮過程,然后推導(dǎo)出解壓步驟,完成數(shù)據(jù)的復(fù)原過程。
3 文件壓縮與解壓系統(tǒng)的設(shè)計(jì)
在研究過一些壓縮和解壓算法后,使用Java編程語言設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)文件壓縮與解壓系統(tǒng)。本系統(tǒng)主要包括七個(gè)主要功能:
(1)前臺(tái)界面:給予用戶可視化界面,方便管理。
(2)解壓縮控制:控制文件的壓縮和解壓,如:一鍵解壓,一鍵壓縮等。
(3)文件控制:添加文件到某個(gè)壓縮包或在某個(gè)壓縮包內(nèi)刪除某個(gè)文件。
(4)語言控制:用于各國(guó)語言和中文的轉(zhuǎn)換。
(5)搜索:在壓縮包里方便找到某個(gè)文件或文件夾。
(6)創(chuàng)建自解壓文件:有的時(shí)候,本項(xiàng)目更需要的是創(chuàng)建自解壓文件,這樣就可以隨時(shí)隨地地調(diào)用它,而不需要壓縮軟件的支持。創(chuàng)建自解壓文件的方法也很簡(jiǎn)單,在設(shè)置壓縮文件屬性的圖2窗口的"General"頁面中,勾選"Create SFX archive"(創(chuàng)建自解壓文件),你會(huì)發(fā)現(xiàn)剛才的*.rar變成了*.exe。
(7)生成分卷自解壓文件 :在進(jìn)行數(shù)據(jù)備份或大文件交換時(shí),通常采取用壓縮軟件分卷壓縮到軟盤上的辦法,而在復(fù)原的時(shí)候則需要用到該壓縮軟件,否則這些壓縮文件便無法復(fù)原。 首先在主界面中選定欲壓縮的文件夾或文件,單擊鼠標(biāo)右鍵,從快捷菜單中選"Add to Archive"命令,出現(xiàn)小窗口,先將壓縮文檔名稱填入,需要帶路徑(如A:\文件名)。然后從容量(Volume size)下拉菜單中選擇與軟盤對(duì)應(yīng)的數(shù)值。有360KB、720KB、1.2MB、1.44MB、2.88MB和自動(dòng)檢測(cè)六個(gè)備選項(xiàng),也可以輸入自己設(shè)定的數(shù)值。在文檔選項(xiàng)區(qū)內(nèi)選中"自解壓"(SFX archive)方式,最后單擊,則開始進(jìn)行分卷壓縮,生成的第一個(gè)文件擴(kuò)展名為.exe,第二個(gè)文檔擴(kuò)展名為.r00,第三個(gè)為.r01,依此類推。復(fù)原時(shí),先插入第一張軟盤,執(zhí)行?.exe文件,隨后會(huì)提示依次插入其他軟盤,則順利地完成解壓縮。
4 測(cè)試
現(xiàn)在壓縮技術(shù)發(fā)展較好,也因此產(chǎn)生了很多性能非常好的壓縮軟件,如WinRAR、7 2、快壓、360壓縮和好壓等。這些壓縮軟件在壓縮率、壓縮時(shí)間和支持的文件格式等方面都有著不錯(cuò)的表現(xiàn)。通過使用本文設(shè)計(jì)的基于無損壓縮技術(shù)的壓縮與解壓系統(tǒng)將一個(gè)由doc、xls、txt、pdf文件組成的大小為6.3MB的文件夾進(jìn)行壓縮和解壓,分析程序可用性和實(shí)用性。經(jīng)過測(cè)試發(fā)現(xiàn),成功壓縮和還原了源文件,實(shí)現(xiàn)了預(yù)期目標(biāo)。
5 結(jié)束語
本文對(duì)數(shù)據(jù)壓縮與解壓過程進(jìn)行了簡(jiǎn)單的論述,通過了解一些常用的壓縮算法,可以幫助理解數(shù)據(jù)壓縮與解壓的實(shí)現(xiàn)原理。目前數(shù)據(jù)壓縮算法多種多樣,在這些基礎(chǔ)算法上進(jìn)行一些改進(jìn)又可以產(chǎn)生很多不同的算法,例如可以改進(jìn)壓縮鏈碼提高壓縮效率。常用的壓 縮軟件也是基于這些壓縮算法實(shí)現(xiàn)的,可以結(jié)合使用,算法的選擇會(huì)對(duì)系統(tǒng)最終的壓縮效果產(chǎn)生直接的影響。
參考文獻(xiàn)
[1]汪帥,呂江花,汪溁鶴等.一種支持?jǐn)?shù)據(jù)去冗和擴(kuò)容的多媒體文件云存儲(chǔ)系統(tǒng)實(shí)現(xiàn)[J].計(jì)算機(jī)研究與發(fā)展,2018,55(5):1034-1048.
[2]劉娜.淺談?dòng)?jì)算機(jī)中的字符編碼[J].科技創(chuàng)新與應(yīng)用,2017(1):107-107.
[3]吳家安.數(shù)據(jù)壓縮技術(shù)及應(yīng)用[M].北京:科學(xué)出版社,2008.
[8]苑思明,鄭晗,李俊杰.基于哈夫曼樹壓縮的加密技術(shù)[J].信息記錄材料,2018(6).