當前位置:成語大全網 - 新華字典 - 壓縮是幹什麽的

壓縮是幹什麽的

加以壓力,以減小體積、大小、持續時間、密度和濃度等

壓縮是壹種通過特定的算法來減小計算機文件大小的機制。這種機制是壹種很方便的發明,尤其是對網絡用戶,因為它可以減小文件的字節總數,使文件能夠通過較慢的互聯網連接實現更快傳輸,此外還可以減少文件的磁盤占用空間

壓縮(compression)是為了減少數據大小以節省保存空間和傳輸的時間。為了數據的傳輸,壓縮能夠作用於單獨的數據內容或者所有的傳輸單元(包括數據頭),這取決於壹些特定的因素。

內容壓縮很簡單,它就是移除多余的空白字符,插入單個的重復字符指出壹個字符串中重復的字符,以及將小型的位串用頻繁使用的字符替代。這種類型的壓縮能夠將文本文件的大小減少50%。壓縮由使用特定公式和算法的程序來執行,它確定如何壓縮和解壓數據。利用算法將文件有損或無損地處理,以達到保留最多文件信息,而令文件體積變小。壓縮文件的基本原理是查找文件內的重復字節,並建立壹個相同字節的"詞典"文件,並用壹個代碼表示,比如在文件裏有幾處有壹個相同的詞"中華人民***和國"用壹個代碼表示並寫入"詞典"文件,這樣就可以達到縮小文件的目的軟件。由於計算機處理的信息是以二進制數的形式表示的,因此壓縮軟件就是把二進制信息中相同的字符串以特殊字符標記來達到壓縮的目的。為了有助於理解文件壓縮,請您在腦海裏想象壹幅藍天白雲的圖片。對於成千上萬單調重復的藍色像點而言,與其壹個壹個定義“藍、藍、藍……”長長的壹串顏色,還不如告訴電腦:“從這個位置開始存儲1117個藍色像點”來得簡潔,而且還能大大節約存儲空間。這是壹個非常簡單的圖像壓縮的例子。其實,所有的計算機文件歸根結底都是以“1”和“0”的形式存儲的,和藍色像點壹樣,只要通過合理的數學計算公式,文件的體積都能夠被大大壓縮以達到“數據無損稠密”的效果。總的來說,壓縮可以分為有損和無損壓縮兩種。如果丟失個別的數據不會造成太大的影響,這時忽略它們是個好主意,這就是有損壓縮。有損壓縮廣泛應用於動畫、聲音和圖像文件中,典型的代表就是影碟文件格式mpeg、音樂文件格式mp3和圖像文件格式jpg。但是更多情況下壓縮數據必須準確無誤,人們便設計出了無損壓縮格式,比如常見的zip、rar等。壓縮軟件(compression software)自然就是利用壓縮原理壓縮數據的工具,壓縮後所生成的文件稱為壓縮包(archive),體積只有原來的幾分之壹甚至更小。當然,壓縮包已經是另壹種文件格式了,如果妳想使用其中的數據,首先得用壓縮軟件把數據還原,這個過程稱作解壓縮。常見的壓縮軟件有Winzip、WinRAR等。

有兩種形式的重復存在於計算機數據中,zip就是對這兩種重復進行了壓縮。

第壹種

壹種是短語形式的重復,即三個字節以上的重復,對於這種重復,zip用兩個數字:1.重復位置距當前壓縮位置的距離;2.重復的長度,來表示這個重復,假設這兩個數字各占壹個字節,於是數據便得到了壓縮,這很容易理解。

壹個字節有 0 - 255 *** 256 種可能的取值,三個字節有 256 * 256 * 256 ***壹千六百多萬種可能的情況,更長的短語取值的可能情況以指數方式增長,出現重復的概率似乎極低,實則不然,各種類型的數據都有出現重復的傾向,壹篇論文中,為數不多的術語傾向於重復出現;壹篇小說,人名和地名會重復出現;壹張上下漸變的背景圖片,水平方向上的像素會重復出現;程序的源文件中,語法關鍵字會重復出現(我們寫程序時,多少次前後copy、paste?),以幾十 K 為單位的非壓縮格式的數據中,傾向於大量出現短語式的重復。經過上面提到的方式進行壓縮後,短語式重復的傾向被完全破壞,所以在壓縮的結果上進行第二次短語式壓縮壹般是沒有效果的。

第二種

第二種重復為單字節的重復,壹個字節只有256種可能的取值,所以這種重復是必然的。其中,某些字節出現次數可能較多,另壹些則較少,在統計上有分布不均勻的傾向,這是容易理解的,比如壹個 ASCII 文本文件中,某些符號可能很少用到,而字母和數字則使用較多,各字母的使用頻率也是不壹樣的,據說字母 e 的使用概率最高;許多圖片呈現深色調或淺色調,深色(或淺色)的像素使用較多(這裏順便提壹下:png圖片格式是壹種無損壓縮,其核心算法就是 zip 算法,它和 zip 格式的文件的主要區別在於:作為壹種圖片格式,它在文件頭處存放了圖片的大小、使用的顏色數等信息);上面提到的短語式壓縮的結果也有這種傾向:重復傾向於出現在離當前壓縮位置較近的地方,重復長度傾向於比較短(20字節以內)。這樣,就有了壓縮的可能:給 256 種字節取值重新編碼,使出現較多的字節使用較短的編碼,出現較少的字節使用較長的編碼,這樣壹來,變短的字節相對於變長的字節更多,文件的總長度就會減少,並且,字節使用比例越不均勻,壓縮比例就越大。

常用的壓縮軟件和壓縮格式

編輯

常用壓縮軟件

WinMount、WinRAR、WinZip、7-Zip 、coolrar

常見壓縮文件格式

主要有:rar,zip,tar,cab,uue,jar,iso,z,7-zip,ace,lzh,arj,gzip,bz2等壓縮文件。

經過壓縮軟件壓縮的文件叫壓縮文件,壓縮的原理是把文件的二進制代碼壓縮,把相鄰的0,1代碼減少,比如有000000,可以把它變成6個0 的寫法60,來減少該文件的空間。

JAR

JAR 文件就是 Java Archive File,顧名思意,它的應用是與 Java 息息相關的,是 Java 的壹種文檔格式。JAR 文件非常類似 ZIP 文件——準確的說,它就是 ZIP 文件,所以叫它文件包。JAR 文件與 ZIP 文件唯壹的區別就是在 JAR 文件的內容中,包含了壹個 META-INF/MANIFEST.MF 文件,這個文件是在生成 JAR 文件的時候自動創建的。

ZIP

ZIP應該算是最常見的壓縮文件格式了,妳甚至不需要單獨為它安裝壹個壓縮或者解壓縮軟件,因為我們使用的Windows系統以及集成了對ZIP壓縮格式的支持。

RAR

雖然ZIP在壓縮文件格式中地位很高,但相當多的下載網站都選擇了用RAR格式來壓縮他們的文件,最根本的原因就在於RAR格式的文件壓縮率比ZIP更高。

7Z作為壓縮格式的後起新秀,7Z有著比RAR更高的壓縮率,能夠將文件壓縮的更加小巧。不過因為RAR格式已經高度普及,又沒有網絡普及的“天時”相助,7Z想要取代RAR的地位還是相當不容易的。

CAB

CAB是微軟的壹種安裝文件壓縮格式,主要應用於軟件的安裝程序中。因為涉及到安裝程序,所以cab文件中包含的文件通常都不是簡單的直接壓縮,而是對文件名等都進行了處理,所以雖然可以對其直接解壓縮,但解壓後得到的文件通常都無法直接使用。

ISO

很多朋友都認為ISO是壹種壓縮格式,這源於WinRAR添加了對ISO格式“解壓”的支持。而實際上,ISO並不是壓縮格式,它之中所包含的文件也並沒有經過壓縮。ISO只是壹種光盤的鏡像格式,完全復制並保存了光盤上的內容而已。所謂的對ISO“解壓”的過程,不過就是對ISO內文件的提取過程。

TAR

tar為後輟的文件能用WinZip或WinRAR打開,是因為WinZip或WinRar對.tar文件進行了關聯,也就是指可以用相應的解壓軟件將其解壓。

.tar是linux下較為常用的壓縮文件的格式,並不是什麽數據庫文件。

UUE

uue是壹種在遇到郵件編碼混合引起亂碼的情況下比較有用的壓縮格式,可以用WinZip或者WinRAR打開。

上面我們主要只介紹了常用的壓縮文件。

壓縮基本原理

編輯

概述

如果您從互聯網上下載了許多程序和文件,可能會遇到很多ZIP文件。這種壓縮機制是壹種很方便的發明,尤其是對網絡用戶,因為它可以減小文件中的比特和字節總數,使文件能夠通過較慢的互聯網連接實現更快傳輸,此外還可以減少文件的磁盤占用空間。在下載了文件後,計算機可使用WinZip或Stuffit這樣的程序來展開文件,將其復原到原始大小。如果壹切正常,展開的文件與壓縮前的原始文件將完全相同。 乍壹聽好像很神秘:您是怎樣減少比特和字節的數量並將它們原封不動地還原回去的呢?等壹切水落石出之後,您會發現這個過程背後的基本理念其實非常簡單明了。在本文中,我們將討論這種通過簡單壓縮來明顯減小文件的方法。

大多數計算機文件類型都包含相當多的冗余內容——它們會反復列出壹些相同的信息。文件壓縮程序就是要消除這種冗余現象。與反復列出某壹塊信息不同,文件壓縮程序只列出該信息壹次,然後當它在原始程序中出現時再重新引用它。

舉例

以我們熟悉的信息類型——單詞——為例子。

肯尼迪(John F. Kennedy)在1961年的就職演說中曾說過下面這段著名的話:

Ask not what your country can do for you——ask what you can do for your country.(不要問國家能為妳做些什麽,而應該問自己能為國家做些什麽。)

這段話有17個單詞,包含61個字母、16個空格、1個破折號和1個句點。如果每個字母、空格或標點都占用1個內存單元,那麽文件的總大小為79個單元。為了減小文件的大小,我們需要找出冗余的部分。

我們立刻發現:

如果忽略大小寫字母間的區別,這個句子幾乎有壹半是冗余的。九個單詞(ask、not、what、your、country、can、do、for、you)幾乎提供了組成整句話所需的所有東西。為了構造出另壹半句子,我們只需要拿出前半段句子中的單詞,然後加上空格和標點就行了。

大多數壓縮程序使用基於自適應字典的LZ算法來縮小文件。“LZ”指的是此算法的發明者Lempel和Ziv,“字典”指的是對數據塊進行歸類的方法。

排列字典的機制有很多種,它也可以像編號列表那樣簡單。在我們檢查肯尼迪這句著名講話時,可以挑出重復的單詞,並將它們放到編號索引中。然後,我們直接寫入編號而不是寫入整個單詞。

結論

因此,如果我們的字典是:

ask

what

your

country

can

do

for

you

我們的句子就應該是這樣的:

1 not 2 3 4 5 6 7 8-- 1 2 8 5 6 7 3 4

如果您了解這種機制,那麽只需使用該字典和編號模式即可輕松重新構造出原始句子。這就是在展開某個下載文件時,計算機中的解壓縮程序所做的工作。妳可能還遇到過能夠自行解壓縮的壓縮文件。若要創建這種文件,編程人員需要在被壓縮的文件中設置壹個簡單的解壓縮程序。在下載完畢後,它可以自動重新構造出原始文件。

但是使用這種機制究竟能夠節省多少空間呢?“1 not 2 3 4 5 6 7 8——1 2 8 5 6 7 3 4”當然短於“Ask not what your country can do for you-- ask what you can do for your country.”,但應註意的是,我們需要隨文件壹起保存這個字典。

在實際壓縮方案中,計算出各種文件需求是壹個相當復雜的過程。讓我們回過頭考慮壹下上面的例子。每個字符和空格都占用1個內存單元,整個原句要占用79個單元。壓縮後的句子(包括空格)占用了37個單元,而字典(單詞和編號)也占用了37個單元。也就是說,文件的大小為74個單元,因此我們並沒有把文件大小減少很多。

但這只是壹個句子的情況!可以想象的是,如果用該壓縮程序處理完肯尼迪講話的其余部分,我們會發現這些單詞以及其他單詞重復了更多次。而且,正如下壹節所言,為了得到盡可能高的組織效率,可以對字典進行重寫。

在上壹個的例子中,我們挑出了所有重復的單詞並將它們放在壹個字典中。對於我們來說,這是最顯而易見的字典編寫方法。但是壓縮程序卻不這樣認為:它對單詞沒有概念——它只會尋找各個模式。為了盡可能減小文件的大小,它會仔細挑選出最優模式。

如果從這個角度處理該句子,我們最終會得到壹個完全不同的字典。

如果壓縮程序掃描肯尼迪的這句話,它遇到的第壹個冗余部分只有幾個字母長。在ask not what your中,出現了壹個重復的模式,即字母t後面跟壹個空格——在not和what中。如果壓縮程序將此模式寫入字典,則每次出現“t”後面跟壹個空格的情況時,它會寫入壹個“1”。但是在這個短句中,此模式的出現次數不夠多,不足以將其保留為字典中的壹個條目,因此程序最終會覆蓋它。

程序接下來註意到的內容是ou,在your和country中都出現了它。如果這是壹篇較長的文檔,將此模式寫入字典會節省大量空間——在英語中ou是壹個十分常見的字母組合。但是在壓縮程序看完整個句子後,它立即發現了壹個更好的字典條目選擇:不僅ou發生了重復,而且your和country整個單詞都發生了重復,並且它們實際上是作為壹個短語your country壹起發生重復的。在本例中,程序會用your country條目覆蓋掉字典中的ou條目。

短語can do for也發生了重復,壹次後面跟著your,另壹次跟著you,因此我們又發現can do for you也是壹種重復模式。這樣,我們可以用壹個數字來代替15個字符(包含空格),而your country只允許我們用壹個數字代替13個字符(包含空格),所以程序會用r country條目覆蓋your country條目,然後再寫入壹個單獨的can do for you條目。程序通過這種方式繼續工作,挑出所有重復的信息,然後計算應該將哪壹種模式寫入字典。基於自適應字典的LZ算法中的“自適應”部分指的就是這種重寫字典的能力。程序執行此工作的過程實際上非常復雜。

無論使用什麽方法,這種深入搜索機制都能比僅僅挑出單詞這種方法更有效率地對文件進行壓縮。如果使用我們上面提取出的模式,然後用“__”代替空格,最終將得到下面這個更大的字典:

ask__

what__?

you

r__country

__can__do__for__you

而句子則較短:

“1not__2345__--__12354”

句子占用18個內存單元,字典占用41個單元。所以,我們將文件總大小從79個單元壓縮到了59個單元!這僅僅是壓縮句子的壹種方法,而且不壹定是最高效的方法。(看看您能找到更好的方法嗎!)

優勢

編輯

那麽這種機制到底有多好呢?文件壓縮率取決於多種因素,包括文件類型、文件大小和壓縮方案。

在世界上的大多數語言中,某些字母和單詞經常以相同的模式壹起出現。正是由於這種高冗余性,而導致文本文件的壓縮率會很高。通常大小合適的文本文件的壓縮率可以達到50%或更高。大多數編程語言的冗余度也很高,因為它們的命令相對較少,並且命令經常采用壹種設定的模式。對於包含大量不重復信息的文件(例如圖像或MP3文件),則不能使用這種機制來獲得很高的壓縮率,因為它們不包含重復多次的模式。

如果文件有大量重復模式,那麽壓縮率通常會隨著文件大小的增加而增加。從我們的例子中就可以看出這壹點——如果我們摘錄的肯尼迪講話再長壹些,您會發現又多次出現了我們字典中的模式,因此能夠通過每個字典條目節省更多的文件空間。此外,對於更大的文件,還可能出現具有更大普遍性的模式,從而能夠創建出效率更高的字典。

此外,文件壓縮效率還取決於壓縮程序使用的具體算法。有些程序能夠在某些類型的文件中更好地尋找到模式,因此能更有效地壓縮這些類型的文件。其他壹些壓縮程序在字典中又使用了字典,這使它們在壓縮大文件時表現很好,但是在壓縮較小的文件時效率不高。盡管這壹類的所有壓縮程序都基於同壹個基本理念,但是它們的執行方式卻各不相同。程序開發人員始終在嘗試建立更好的壓縮機制。

有損壓縮和無損壓縮

編輯

我們在上文中討論的壓縮類型稱為無損壓縮,因為您重新創建的文件與原始文件完全相同。所有無損壓縮都基於這樣壹種理念:將文件變為“較小”的形式以利於傳輸或存儲,並在另壹方收到它後復原以便重新使用它。

有損壓縮則與此大不相同。這些程序直接去除“不必要”的信息,對文件進行剪裁以使它變得更小。這種類型的壓縮大量應用於減小位圖圖像的文件大小,因為位圖圖像的體積通常非常龐大。為了了解有損壓縮的工作原理,讓我們看看妳的計算機如何對壹張掃描的照片進行壓縮。

對於此類文件,無損壓縮程序的壓縮率通常不高。盡管圖片的大部分看起來都是相同的——例如,整個天空都是藍色的——但是大部分像素之間都存在微小的差異。為了使圖片變得更小同時不降低其分辨率,您必須更改某些像素的顏色值。如果圖片中包含大量的藍色天空,程序會挑選壹種能夠用於所有像素的藍色。然後,程序重寫該文件,所有天空像素的值都使用此信息。如果壓縮方案選擇得當,您不會註意到任何變化,但是文件大小會顯著減小。

當然,對於有損壓縮,在文件壓縮後您無法將其復原成原始文件的樣子。您必須接受壓縮程序對原始文件的重新解釋。因此,如果需要完全重現原來的內容(例如軟件應用程序、數據庫和總統就職演說),則不應該使用這種壓縮形式。