壓縮文件基本原理
壓縮文件的基本原理是查找文件内的重複字節,并建立一個相同字節的“詞典”文件,并用一個代碼表示,比如在文件裡有幾處有一個相同的詞“中華人民共和國”用一個代碼表示并寫入“詞典”文件,這樣就可以達到縮小文件的目的。
由于計算機處理的信息是以二進制數的形式表示的,因此壓縮軟件就是把二進制信息中相同的字符串以特殊字符标記來達到壓縮的目的。為了有助于理解文件壓縮,請您在腦海裡想象一幅藍天白雲的圖片。對于成千上萬單調重複的藍色像點而言,與其一個一個定義“藍、藍、藍……”長長的一串顔色,還不如告訴電腦:“從這個位置開始存儲1117個藍色像點”來得簡潔,而且還能大大節約存儲空間。這是一個非常簡單的圖像壓縮的例子。其實,所有的計算機文件歸根結底都是以1和0的形式存儲的,和藍色像點一樣,隻要通過合理的數學計算公式,文件的體積都能夠被大大壓縮以達到“數據無損稠密”的效果。
壓縮方法
安裝壓縮軟件
首先要安裝壓縮軟件,現在比較流行的是WinRAR「一種高效快速的文件壓縮軟件(中文版)」。
在要壓縮的文件上點右鍵
其次是建立一個壓縮包:選擇你要制作成壓縮包的文件或文件夾,當然你也可以多選,方法同資源管理器,也就是按住Ctrl或Shift再選擇文件(文件夾)。
添加到壓縮文件,選常規
選取完畢之後,就可以單擊工具欄上的“壓縮”按鈕,在這裡你可以選擇壓縮格式:RAR和ZIP。 如果你想得到較大的壓縮率,建議選擇RAR格式。
各個選項選擇好以後,單擊确定按鈕就開始制作壓縮包了,非常方便。
批定壓縮分卷大小
( 按字節計算),1M = 1024K,1K = 1024字節,填寫數字即可。
有時候大家會遇到這個問題,就是你在一個論壇裡要上傳一些文件壓縮包,壓縮包大小有3M,但是論壇限制會員上傳大小隻有2M,怎麼辦呢?
其實辦法很簡單,就是在你壓縮這個文件時,分成幾個帶分卷壓縮包,分卷包大小設置為2M即可,比如:原來文件名為123.rar(3M),壓縮成分卷包後為123.part1.rar(2M)與123.part2.rar(1M)兩個文件,這樣你就可以上傳了。
解壓縮方法
當你下載了帶有分卷的壓縮包後,如何解壓文件呢?具體方法如下:
1、把所有的壓縮分卷全部下載完整
2、所有分卷必須在同一個文件夾内
3、然後雙擊解壓任意一個分卷,即可
注:分卷解壓的文件必須是連續的
若分卷未下載完整,則解壓時自然會提示需要下一壓縮分卷
軟件介紹
簡介
WinRAR,流行好用的 Windows 壓縮工具!
WinRAR 是一個強大的壓縮文件管理工具。它能備份你的數據,減少你的 E-mail附件的大小,解壓縮從Internet上下載的 RAR、ZIP和其他格式的壓縮文件,并能創建 RAR 和 ZIP 格式的壓縮文件。在購買之前,你可以下載試用版本。
WINRAR 是目前流行的壓縮工具,界面友好,使用方便,在壓縮率和速度方面都有很好的表現。其壓縮率比高,3.x 采用了更先進的壓縮算法,是現在壓縮率較大、壓縮速度較快的格式之一。3.3增加了掃描壓縮文件内病毒、解壓縮“增強壓縮” ZIP 壓縮文件的功能,升級了分卷壓縮的功能等。
主要特點
1、對 RAR 和 ZIP 的完全支持;
2、支持 ARJ、CAB、LZH、ACE、TAR、GZ、UUE、BZ2、JAR、ISO 類型文件的解壓;
3、多卷壓縮功能;
4、創建自解壓文件,可以制作簡單的安裝程序,使用方便;
5、壓縮文件大小可以達到 8,589,934 TB;
6、鎖定和強大的數據恢複記錄功能,對數據的保護無微不至,新增的恢複卷的使用功能更強大
運行原理
無損壓縮
如果您從互聯網上下載了許多程序和文件,可能會遇到很多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文件),則不能使用這種機制來獲得很高的壓縮率,因為它們不包含重複多次的模式。
如果文件有大量重複模式,那麼壓縮率通常會随着文件大小的增加而增加。從我們的例子中就可以看出這一點——如果我們摘錄的肯尼迪講話再長一些,您會發現又多次出現了我們字典中的模式,因此能夠通過每個字典條目節省更多的文件空間。此外,對于更大的文件,還可能出現具有更大普遍性的模式,從而能夠創建出效率更高的字典。
此外,文件壓縮效率還取決于壓縮程序使用的具體算法。有些程序能夠在某些類型的文件中更好地尋找到模式,因此能更有效地壓縮這些類型的文件。其他一些壓縮程序在字典中又使用了字典,這使它們在壓縮大文件時表現很好,但是在壓縮較小的文件時效率不高。盡管這一類的所有壓縮程序都基于同一個基本理念,但是它們的執行方式卻各不相同。程序開發人員始終在嘗試建立更好的壓縮機制。
有損壓縮
我們在上文中讨論的壓縮類型稱為無損壓縮,因為您重新創建的文件與原始文件完全相同。所有無損壓縮都基于這樣一種理念:将文件變為“較小”的形式以利于傳輸或存儲,并在另一方收到它後複原以便重新使用它。
有損壓縮則與此大不相同。這些程序直接去除“不必要”的信息,對文件進行剪裁以使它變得更小。這種類型的壓縮大量應用于減小位圖圖像的文件大小,因為位圖圖像的體積通常非常龐大。為了了解有損壓縮的工作原理,讓我們看看你的計算機如何對一張掃描的照片進行壓縮。
對于此類文件,無損壓縮程序的壓縮率通常不高。盡管圖片的大部分看起來都是相同的——例如,整個天空都是藍色的——但是大部分像素之間都存在微小的差異。為了使圖片變得更小同時不降低其分辨率,您必須更改某些像素的顔色值。如果圖片中包含大量的藍色天空,程序會挑選一種能夠用于所有像素的藍色。然後,程序重寫該文件,所有天空像素的值都使用此信息。如果壓縮方案選擇得當,您不會注意到任何變化,但是文件大小會顯著減小。
當然,對于有損壓縮,在文件壓縮後您無法将其複原成原始文件的樣子。您必須接受壓縮程序對原始文件的重新解釋。因此,如果需要完全重現原來的内容(例如軟件應用程序、數據庫和總統就職演說),則不應該使用這種壓縮形式。
壓縮分類
總的來說,壓縮可以分為有損和無損壓縮兩種。如果丢失個别的數據不會造成太大的影響,這時忽略它們是個好主意,這就是有損壓縮。有損壓縮廣泛應用于動畫、聲音和圖像文件中,典型的代表就是影碟文件格式mpeg、音樂文件格式mp3和圖像文件格式jpg。但是更多情況下壓縮數據必須準确無誤,人們便設計出了無損壓縮格式,比如常見的zip、rar等。
壓縮軟件及壓縮包
壓縮軟件(compressionsoftware)自然就是利用壓縮原理壓縮數據的工具,壓縮後所生成的文件稱為壓縮包(archive),體積隻有原來的幾分之一甚至更小。當然,壓縮包已經是另一種文件格式了,如果你想使用其中的數
據,首先得用壓縮軟件把數據還原,這個過程稱作解壓縮。常見的壓縮軟件有winzip、winrar等。
兩種重複形式
有兩種形式的重複存在于計算機數據中。
一種是短語形式的重複,即三個字節以上的重複,對于這種重複,zip用兩個數字:1.重複位置距當前壓縮位置的距離;2.重複的長度,來表示這個重複,假設這兩個數字各占一個字節,于是數據便得到了壓縮,這很容易理解。
一個字節有0-255共256種可能的取值,三個字節有256*256*256共一千六百多萬種可能的情況,更長的短語取值的可能情況以指數方式增長,出現重複的概率似乎極低,實則不然,各種類型的數據都有出現重複的傾向,一篇論文中,為數不多的術語傾向于重複出現;一篇小說,人名和地名會重複出現;一張上下漸變的背景圖片,水平方向上的像素會重複出現;程序的源文件中,語法關鍵字會重複出現,以幾十K為單位的非壓縮格式的數據中,傾向于大量出現短語式的重複。經過上面提到的方式進行壓縮後,短語式重複的傾向被完全破壞,所以在壓縮的結果上進行第二次短語式壓縮一般是沒有效果的。
第二種重複為單字節的重複,一個字節隻有256種可能的取值,所以這種重複是必然的。其中,某些字節出現次數可能較多,另一些則較少,在統計上有分布不均勻的傾向,這是容易理解的,比如一個ASCII文本文件中,某些符号可能很少用到,而字母和數字則使用較多,各字母的使用頻率也是不一樣的,據說字母e的使用概率最高;許多圖片呈現深色調或淺色調,深色(或淺色)的像素使用較多;上面提到的短語式壓縮的結果也有這種傾向:重複傾向于出現在離當前壓縮位置較近的地方,重複長度傾向于比較短(20字節以内)。這樣,就有了壓縮的可能:給256種字節取值重新編碼,使出現較多的字節使用較短的編碼,出現較少的字節使用較長的編碼,這樣一來,變短的字節相對于變長的字節更多,文件的總長度就會減少,并且,字節使用比例越不均勻,壓縮比例就越大。



















