壓縮是壹種通過特定算法減小計算機文件大小的機制。這種機制是壹種非常方便的發明,特別是對於網絡用戶來說,因為它可以減少文件的總字節數,使文件能夠通過緩慢的互聯網連接更快地傳輸,同時也減少了文件占用的磁盤空間。
壓縮就是縮小數據大小,以節省存儲空間和傳輸時間。對於數據傳輸,壓縮可以應用於單個數據內容或所有傳輸單元(包括數據頭),這取決於壹些特定的因素。
內容壓縮很簡單,就是去掉多余的空白字符,插入單個重復字符來表示壹個字符串中重復的字符,用常用字符替換小比特串。這種類型的壓縮可以將文本文件的大小減少50%。壓縮由使用特定公式和算法的程序執行,這些公式和算法決定如何壓縮和解壓縮數據。該算法用於對文件進行有損或無損處理,從而保留文件的大部分信息,使文件更小。文件壓縮的基本原理是找出文件中重復的字節,用相同的字節創建壹個“字典”文件,並用壹個代碼表示。比如文件中有幾個地方把同壹個詞“中國人* * *和中國”用壹個代碼表示,寫入“字典”文件,就可以達到減檔的目的。由於計算機處理的信息是以二進制數的形式表示的,壓縮軟件用特殊字符標記二進制信息中的相同字符串,以達到壓縮的目的。為了幫助妳理解文件壓縮,請在妳的腦海中想象壹幅藍天白雲的畫面。對於成千上萬個單調的藍色像素,與其壹個個定義壹長串顏色“藍、藍、藍……”不如告訴計算機:“從這個位置存儲1117個藍色像素”更簡潔,可以大大節省存儲空間。這是壹個非常簡單的圖像壓縮的例子。其實歸根結底,所有的電腦文件都是以“1”和“0”的形式存儲的。就像藍色像素壹樣,通過合理的數學計算公式,可以大大壓縮文件的體積,達到“數據無損、密集”的效果。壹般來說,壓縮可以分為有損壓縮和無損壓縮。如果個別數據的丟失不會有太大的影響,忽略它們是壹個好主意,這就是有損壓縮。有損壓縮廣泛應用於動畫、聲音和圖像文件,典型代表是mpeg、mp3和jpg。但更多情況下,壓縮的數據必須準確,所以人們設計了無損壓縮格式,比如常見的zip和rar。壓縮軟件自然是利用壓縮原理壓縮數據的工具。壓縮後生成的文件叫做archive,它的體積只有幾分之壹甚至更小。當然,壓縮包已經是另壹種文件格式了。如果要使用其中的數據,必須先用壓縮軟件恢復數據。這個過程叫做解壓。常見的壓縮軟件有Winzip、WinRAR等。
計算機數據有兩種形式的重復,zip壓縮它們。
第壹種
壹種是短語形式的重復,即三個字節以上的重復。對於這種重復,zip使用兩個數字:1。重復位置和當前壓縮位置之間的距離;2.重復的長度,來表示這個重復,假設這兩個數各占壹個字節,那麽數據是壓縮的,很好理解。
壹個字節有0-255 * * 256個可能值,三個字節有256 * 256 * 256 * * 1600多萬種可能情況。較長短語的可能值呈指數增長,重復的概率似乎極低。事實上,所有類型的數據都傾向於重復。在壹篇論文中,有幾個術語會重復出現。壹部小說,人名和地名會反復出現;壹張上下漸變的背景圖片,水平方向的像素會重復出現;語法關鍵詞會在程序的源文件中反復出現(我們寫程序前後復制粘貼了多少次?),在以幾十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,可以改成六個零寫60,減少文件的空間。
沖突
JAR文件是Java歸檔文件,其應用與Java密切相關,是Java的壹種文檔格式。JAR文件非常類似於ZIP文件——確切地說,它是壹個ZIP文件,所以它被稱為文件包。JAR文件和ZIP文件之間唯壹的區別是JAR文件的內容包含壹個META-INF/MANIFEST。MF文件,它是在生成JAR文件時自動創建的。
活力
ZIP應該算是最常見的壓縮文件格式,妳甚至不需要為它安裝壹個壓縮或者解壓軟件,因為我們用的是Windows系統,集成了對ZIP壓縮格式的支持。
RAR
雖然ZIP在壓縮文件格式中占據了很高的地位,但相當多的下載網站選擇以RAR格式壓縮文件。最根本的原因是RAR格式的文件壓縮率高於ZIP。
作為壓縮格式的後起之秀,7Z擁有比RAR更高的壓縮率,可以將文件壓縮得更緊湊。但由於RAR格式已經高度普及,沒有網絡普及的“時間”,7Z要取代RAR的地位還是相當困難的。
出租車
CAB是微軟的壹種安裝文件壓縮格式,主要用於軟件安裝程序中。由於涉及到安裝程序,cab文件中包含的文件通常不是簡單的直接壓縮,而是文件名都經過處理,所以雖然可以直接解壓,但解壓後得到的文件通常不會直接使用。
國際標準化組織
很多朋友認為ISO是壓縮格式,源於WinRAR對ISO格式的“解壓”支持。其實ISO並不是壓縮格式,它包含的文件也不是壓縮的。ISO只是光盤的鏡像格式,完全復制並保存光盤上的內容。所謂“解壓”ISO的過程,不過是在ISO內部解壓文件的過程。
水手
以tar作為dropout的文件可以由WinZip或WinRar打開,因為WinZip或WinRAR與。tar文件,也就是說可以用相應的解壓軟件解壓。
。tar是linux下常見的壓縮文件格式,不是數據庫文件。
UUE
Uue是壹個有用的壓縮格式在亂碼的情況下,可以打開WinZip或WinRAR的郵件代碼。
以上我們主要介紹了常用的壓縮文件。
壓縮的基本原理
編輯
摘要
如果妳從網上下載許多程序和文件,妳可能會遇到許多ZIP文件。這種壓縮機制是壹種非常方便的發明,特別是對於網絡用戶來說,因為它可以減少文件中的總位數和字節數,使文件能夠通過緩慢的互聯網連接更快地傳輸,同時也減少了文件占用的磁盤空間。下載文件後,計算機可以使用WinZip或Stuffit之類的程序來擴展文件,並將其恢復到原始大小。如果壹切順利,擴展後的文件將與壓縮前的原始文件完全相同。乍壹看,這似乎很神秘:如何減少比特和字節的數量,並將其完好無損地恢復?當壹切水落石出的時候,妳會發現這個過程背後的基本思路其實非常簡單明了。在本文中,我們將討論這種通過簡單壓縮顯著減少文件的方法。
大多數計算機文件類型包含相當多的冗余——它們壹遍又壹遍地列出壹些相同的信息。文件壓縮程序就是為了消除這種冗余。與重復列出壹條信息不同,文件壓縮程序只列出該信息壹次,然後當它出現在原始程序中時再次引用它。
舉個例子
以大家熟悉的信息類型——文字——為例。
約翰·肯尼迪曾在1961的就職演說中說過以下名言:
不要問妳的國家能為妳做什麽,問問妳能為妳的國家做什麽。(不要問妳的國家能為妳做什麽,而要問妳能為妳的國家做什麽。)
這段話有17個單詞,包括61個字母,16個空格,1個破折號,1個句號。如果每個字母、空格或標點占據1個存儲單元,則文件的總大小為79個單元。為了減小文件大小,我們需要找出冗余部分。
我們立即發現:
如果忽略大小寫字母的區別,這句話幾乎有壹半是多余的。九個單詞(問,不是,什麽,妳的,國家,可以,做,為,妳)提供了幾乎所有妳需要的東西來組成壹個完整的句子。為了構造另半句,我們只需要把前半句的單詞拿出來,然後加上空格和標點符號。
大多數壓縮程序使用基於自適應字典的LZ算法來壓縮文件。“LZ”指的是這個算法的發明者萊姆佩爾和齊夫,“字典”指的是對數據塊進行分類的方法。
排列字典的機制有很多,可以簡單到壹個編號列表。當我們檢查肯尼迪的著名演講時,我們可以挑出重復的話,並把它們放在編號索引中。然後,我們直接寫數字而不是整個單詞。
結論
因此,如果我們的字典是:
要求
什麽
妳的
國家
能
做
為
妳們
我們的句子應該是這樣的:
1而不是2 3 4 5 6 7 8 - 1 2 8 5 6 7 3 4
如果妳理解了這個機制,妳就可以很容易地通過使用這個字典和編號模式來重構原句。這就是計算機中的解壓縮程序在擴展下載的文件時所做的事情。妳可能也遇到過可以自己解壓的壓縮文件。要創建這樣的文件,程序員需要在壓縮文件中設置壹個簡單的解壓縮器。下載後,它可以自動重建原始文件。
但是使用這種機制可以節省多少空間呢?“1不是2345678-1 2856734”當然比“不要問妳的國家能為妳做什麽——問妳能為妳的國家做什麽”要短。,但是需要註意的是,我們需要把這個字典和文件壹起保存。
在實際的壓縮方案中,計算各種文件需求是壹個非常復雜的過程。讓我們回過頭來考慮上面的例子。每個字符和空格占用1個存儲單元,整個原句占用79個單元。壓縮句子(包括空格)占37個單位,詞典(單詞和數字)也占37個單位。換句話說,文件大小是74個單位,所以我們沒有減少太多文件大小。
但這只是壹句話!可想而知,如果肯尼迪演講的其余部分用這個壓縮程序處理,我們會發現這些詞和其他詞被重復的次數更多。而且,正如下壹節提到的,為了獲得盡可能高的組織效率,可以重寫字典。
在最後壹個例子中,我們挑選出所有重復的單詞,並把它們放在字典中。對我們來說,這是最明顯的編寫字典的方法。但是壓縮程序不這麽認為:它沒有單詞的概念——它只是尋找模式。為了盡可能減小文件大小,它會仔細選擇最佳模式。
如果從這個角度來看待這句話,最終會得到壹個完全不同的字典。
如果壓縮器掃描肯尼迪的句子,它遇到的第壹個冗余部分只有幾個字母長。在“不要問妳的是什麽”中,有壹個重復的模式,即字母T後面跟著壹個空格——在“不是”和“是什麽”中。如果compressor將這個模式寫入字典,那麽每當“t”後面跟壹個空格時,它就會寫入壹個“1”。然而,在這個簡短的句子中,這個模式沒有出現足夠的次數來將其作為字典中的壹個條目,因此程序最終會將其覆蓋。
接下來程序註意到的是ou,它同時出現在妳的和妳的國家。如果這是壹個很長的文檔,將這個模式寫入字典會節省很多空間——ou是英語中很常見的字母組合。但是compressor看了整句之後,馬上就找到了壹個更好的詞典詞條選擇:不僅ou重復,your and country的整個單詞也重復,而且它們實際上是作為壹個短語your country壹起重復的。在本例中,程序將使用您的國家條目覆蓋字典中的ou條目。
短語can do for也是重復的,壹次跟your,壹次跟you,所以我們發現can do for you也是重復模式。這樣我們就可以用壹個數字代替15的字符(包括空格),而妳所在的國家只允許我們用壹個數字代替13的字符(包括空格),所以程序會用r國家條目覆蓋妳所在的國家條目,然後單獨寫壹個can do for you條目。程序繼續以這種方式工作,挑出所有重復的信息,然後計算應該將哪個模式寫入字典。基於自適應字典的LZ算法的“自適應”部分就是指這種重寫字典的能力。程序執行這項工作的過程實際上非常復雜。
無論使用什麽方法,這種深度搜索機制都可以比僅僅挑出單詞更高效地壓縮文件。如果我們使用上面提取的模式,然後用“_ _”代替空格,我們最終會得到下面這個更大的字典:
問__
什麽__?
妳們
r _ _國家
_ _能為_ _妳_ _做_ _事
句子更短:
" 1 not _ _ 2345 _ _-_ _ 12354 "
句子占用18個存儲單元,詞典占用41個存儲單元。因此,我們將總文件大小從79個單位壓縮到59個單位!這只是壓縮句子的壹種方式,不壹定是最高效的方式。看看能不能找到更好的辦法!)
優勢
編輯
那麽這個機制到底有多好呢?文件壓縮率取決於許多因素,包括文件類型、文件大小和壓縮方案。
在世界上大多數語言中,壹些字母和單詞經常以相同的模式壹起出現。正是因為這種高冗余,文本文件的壓縮率才會高。通常,大小合適的文本文件的壓縮率可以達到50%或更高。大多數編程語言也是高度冗余的,因為它們的命令相對較少,並且命令通常采用固定的模式。對於包含大量非重復信息的文件(如圖像或MP3文件),這種機制不能用於獲得高壓縮率,因為它們不包含重復模式。
如果壹個文件有大量的重復模式,壓縮比通常會隨著文件大小的增加而增加。這壹點從我們的例子中可以看出——如果我們把肯尼迪的演講提取得更長壹些,妳會發現我們字典中的模式出現了很多次,所以妳可以通過每個字典條目節省更多的文件空間。此外,對於較大的文件,可能有壹個更通用的模式,可以創建更高效的字典。
此外,文件壓縮的效率還取決於壓縮程序使用的具體算法。有些程序可以更好地找到某些類型文件中的模式,因此可以更有效地壓縮這些類型的文件。其他壓縮程序在其字典中使用字典,這使得它們在壓縮大文件時性能良好,但在壓縮較小文件時效率較低。盡管所有這類壓縮程序都基於相同的基本思想,但它們以不同的方式執行。程序員總是試圖建立壹個更好的壓縮機制。
有損壓縮和無損壓縮
編輯
我們上面討論的壓縮類型稱為無損壓縮,因為您重新創建的文件與原始文件完全相同。所有的無損壓縮都是基於這樣壹種思想,即將壹個文件換成“更小”的形式進行傳輸或存儲,在對方收到後再恢復,以便重用。
有損壓縮則完全不同。這些程序直接刪除“不必要”的信息,並剪切文件使其變小。這種類型的壓縮廣泛用於減小位圖圖像的文件大小,因為位圖圖像的體積通常非常大。為了理解有損壓縮的工作原理,讓我們看看您的計算機如何壓縮掃描的照片。
對於這類文件,無損壓縮程序的壓縮率通常不高。雖然大多數圖片看起來都壹樣——例如,整個天空都是藍色的——但大多數像素之間存在細微差異。為了在不降低分辨率的情況下縮小圖片,您必須更改某些像素的顏色值。如果圖片包含大量的藍色天空,程序將選擇壹種可用於所有像素的藍色。然後,程序重寫該文件,天空像素的所有值都使用該信息。如果壓縮方案選擇得當,您不會註意到任何變化,但文件大小會顯著減小。
當然,對於有損壓縮,妳無法在壓縮後恢復原始文件。您必須接受壓縮程序對原始文件的重新解釋。因此,如果妳需要完整地再現原始內容(如軟件應用、數據庫和總統就職演說),就不應該使用這種壓縮形式。