導航:首頁 > 文件處理 > dedegzip壓縮

dedegzip壓縮

發布時間:2023-03-03 19:25:36

① gzip格式是啥

Gzip是一種內容壓縮格式,現在大部份瀏覽器都可以瀏覽經過Gzip壓縮過的內容
伺服器將要輸出的內容使用Gzip壓縮後傳給瀏覽器,這樣可以達到提高網頁的瀏覽速度和減少伺服器網路帶寬的使用,但同時多增加了在伺服器端Gzip壓縮內容的操作,所以會給伺服器帶來一定的負擔...

GZIP最早由Jean-loup Gailly和Mark Adler創建,用於UNIX系統的文件壓縮。我們在linux中經常會用到後綴為.gz的文件,它們就是GZIP格式的。現今已經成為Internet 上使用非常普遍的一種數據壓縮格式,或者說一種文件格式。HTTP協議上的GZIP編碼是一種用來改進WEB應用程序性能的技術。大流量的WEB站點常常使用GZIP壓縮技術來讓用戶感受更快的速度。

gzip 命令
減少文件大小有兩個明顯的好處,一是可以減少存儲空間,二是通過網路傳輸文件時,可以減少傳輸的時間。gzip 是在 Linux 系統中經常使用的一個對文件進行壓縮和解壓縮的命令,既方便又好用。
語法:gzip [選項] 壓縮(解壓縮)的文件名
該命令的各選項含義如下:
-c 將輸出寫到標准輸出上,並保留原有文件。
-d 將壓縮文件解壓。
-l 對每個壓縮文件,顯示下列欄位:
壓縮文件的大小;未壓縮文件的大小;壓縮比;未壓縮文件的名字
-r 遞歸式地查找指定目錄並壓縮其中的所有文件或者是解壓縮。
-t 測試,檢查壓縮文件是否完整。
-v 對每一個壓縮和解壓的文件,顯示文件名和壓縮比。
-num 用指定的數字 num 調整壓縮的速度,-1 或 --fast 表示最快壓縮方法(低壓縮比),
-9 或--best表示最慢壓縮方法(高壓縮比)。系統預設值為 6。

指令實例:
gzip *
% 把當前目錄下的每個文件壓縮成 .gz 文件。
gzip -dv *
% 把當前目錄下每個壓縮的文件解壓,並列出詳細的信息。
gzip -l *
% 詳細顯示例1中每個壓縮的文件的信息,並不解壓。
gzip usr.tar
% 壓縮 tar 備份文件 usr.tar,此時壓縮文件的擴展名為.tar.gz。

② 深入理解gzip原理

gzip 使用deflate演算法進行壓縮。gzip 對於要壓縮的文件,首先使用LZ77演算法的一個變種進行壓縮,對得到的結果再使用Huffman編碼的方法

如果文件中有兩塊內容相同的話,那麼只要知道前一塊的位置和大小,我們就可以確定後一塊的內容。所以我們可以用(兩者之間的距離,相同內容的長度)這樣一對信息,來替換後一塊內容。由於(兩者之間的距離,相同內容的長度)這一對信息的大小,小於被替換內容的大小,所以文件得到了壓縮。

舉一個例子

有一個文件的內容如下
http://jiurl.yeah.net http://jiurl.nease.net

其中有些部分的內容,前面已經出現過了,下面用()括起來的部分就是相同的部分。
http://jiurl.yeah.net ( http://jiurl.)nease(.net )
我們使用 (兩者之間的距離,相同內容的長度) 這樣一對信息,來替換後一塊內容。(22,13)中,22為相同內容塊與當前位置之間的距離,13為相同內容的長度。(23,4)中,23為相同內容塊與當前位置之間的距離,4為相同內容的長度。由於(兩者之間的距離,相同內容的長度)這一對信息的大小,小於被替換內容的大小,所以文件得到了壓縮。

LZ77演算法使用"滑動窗口"的方法,來尋找文件中的相同部分,也就是匹配串.

解壓縮:
從文件開始到文件結束,每次先讀一位標志位,通過這個標志位來判斷下面是一個(之間的距離,匹配長度) 對,還是一個沒有改動的位元組。如果是一個(之間的距離,匹配長度)對,就讀出固定位數的(之間的距離,匹配長度)對,然後根據對中的信息,將匹配串輸出到當前位置。如果是一個沒有改動的位元組,就讀出一個位元組,然後輸出這個位元組。

LZ77壓縮時需要做大量的匹配工作,而解壓縮時需要做的工作很少,也就是說解壓縮相對於壓縮將快的多。這對於需要進行一次壓縮,多次解壓縮的情況,是一個巨大的優點。

深入理解
要理解這種演算法,我們先了解3個關鍵詞:短語字典,滑動窗口和向前緩沖區。
前向緩沖區
每次讀取數據的時候,先把一部分數據預載入前向緩沖區。為移入滑動窗口做准備
滑動窗口
一旦數據通過緩沖區,那麼它將移動到滑動窗口中,並變成字典的一部分。

短語字典
從字元序列S1...Sn,組成n個短語。比如字元(A,B,D) ,可以組合的短語為{(A),(A,B),(A,B,D),(B),(B,D),(D)},如果這些字元在滑動窗口裡面,就可以記為當前的短語字典,因為滑動窗口不斷的向前滑動,所以短語字典也是不斷的變化。

LZ77的主要演算法邏輯就是,先通過前向緩沖區預讀數據,然後再向滑動窗口移入(滑動窗口有一定的長度),不斷的尋找能與字典中短語匹配的最長短語,然後通過標記符標記。

當壓縮數據的時候,前向緩沖區與移動窗口之間在做短語匹配的是後會存在2種情況:

短語標記包含三部分信息:(滑動窗口中的偏移量(從匹配開始的地方計算)、匹配中的符號個數、匹配結束後的前向緩沖區中的第一個符號)。

我們採用圖例來看:

1、開始

2、滑動窗口中沒有數據,所以沒有匹配到短語,將字元A標記為A

3、滑動窗口中有A,沒有從緩沖區中字元(BABC)中匹配到短語,依然把B標記為B

4、緩沖區字元(ABCB)在滑動窗口的位移6位置找到AB,成功匹配到短語AB,將AB編碼為(6,2,C)

5、緩沖區字元(BABA)在滑動窗口位移4的位置匹配到短語BAB,將BAB編碼為(4,3,A)

6、緩沖區字元(BCAD)在滑動窗口位移2的位置匹配到短語BC,將BC編碼為(2,2,A)

7、緩沖區字元D,在滑動窗口中沒有找到匹配短語,標記為D

8、緩沖區中沒有數據進入了,結束

解壓類似於壓縮的逆向過程,通過解碼標記和保持滑動窗口中的符號來更新解壓數據。

我們還是採用圖例來看下:
1、開始

2、符號標記A解碼

3、符號標記B解碼

4、短語標記(6,2,C)解碼

5、短語標記(4,3,A)解碼

6、短語標記(2,2,A)解碼

7、符號標記D解碼

大多數情況下LZ77壓縮演算法的壓縮比相當高,當然了也和你選擇滑動窗口大小,以及前向緩沖區大小有關系。其壓縮過程是比較耗時的,因為要花費很多時間尋找滑動窗口中的短語匹配,不過解壓過程會很快,因為每個標記都明確告知在哪個位置可以讀取了。

哈夫曼樹也叫最優二叉樹(哈夫曼樹)

問題:什麼是哈夫曼樹?

例:將學生的百分製成績轉換為五分製成績:≥90 分: A,80~89分: B,70~79分: C,60~69分: D,<60分: E。

判別樹:用於描述分類過程的二叉樹。

如果每次輸入量都很大,那麼應該考慮程序運行的時間

如果學生的總成績數據有10000條,則5%的數據需 1 次比較,15%的數據需 2 次比較,40%的數據需 3 次比較,40%的數據需 4 次比較,因此 10000 個數據比較的

次數為: 10000 (5%+2×15%+3×40%+4×40%)=31500次

此種形狀的二叉樹,需要的比較次數是:10000 (3×20%+2×80%)=22000次,顯然:兩種判別樹的效率是不一樣的。

問題:能不能找到一種效率最高的判別樹呢?

那就是哈夫曼樹

樹的帶權路徑長度:樹中所有葉子結點的帶權路徑長度之和,通常記作:

其中,n表示葉子結點的數目,wi和li分別表示葉子結點ki的權值和樹根結點到葉子結點ki之間的路徑長度。
赫夫曼樹(哈夫曼樹,huffman樹)定義:
在權為w1,w2,…,wn的n個葉子結點的所有二叉樹中,帶權路徑長度WPL最小的二叉樹稱為赫夫曼樹或最優二叉樹。

例:有4 個結點 a, b, c, d,權值分別為 7, 5, 2, 4,試構造以此 4 個結點為葉子結點的二叉樹。

WPL=7´2+5´2+2´2+4´2= 36

WPL=7´3+5´3+2´1+4´2= 46

哈夫曼樹的構造(哈夫曼演算法)
1.根據給定的n個權值{w1,w2,…,wn}構成二叉樹集合F={T1,T2,…,Tn},其中每棵二叉樹Ti中只有一個帶權為wi的根結點,其左右子樹為空.
2.在F中選取兩棵根結點權值最小的樹作為左右子樹構造一棵新的二叉樹,且置新的二叉樹的根結點的權值為左右子樹根結點的權值之和.
3.在F中刪除這兩棵樹,同時將新的二叉樹加入F中.
4.重復2、3,直到F只含有一棵樹為止.(得到哈夫曼樹)

哈夫曼樹的應用很廣,哈夫曼編碼就是其在電訊通信中的應用之一。廣泛地用於數據文件壓縮的十分有效的編碼方法。其壓縮率通常在20%~90%之間。在電訊通信業務中,通常用二進制編碼來表示字母或其他字元,並用這樣的編碼來表示字元序列。

例:如果需傳送的電文為 『ABACCDA』,它只用到四種字元,用兩位二進制編碼便可分辨。假設 A, B, C, D 的編碼分別為 00, 01,10, 11,則上述電文便為 『00010010101100』(共 14 位),解碼員按兩位進行分組解碼,便可恢復原來的電文。

能否使編碼總長度更短呢?

實際應用中各字元的出現頻度不相同,用短(長)編碼表示頻率大(小)的字元,使得編碼序列的總長度最小,使所需總空間量最少

數據的最小冗餘編碼問題

在上例中,若假設 A, B, C, D 的編碼分別為 0,00,1,01,則電文 『ABACCDA』 便為 『000011010』(共 9 位),但此編碼存在多義性:可譯為: 『BBCCDA』、『ABACCDA』、『AAAACCACA』 等。

解碼的惟一性問題

要求任一字元的編碼都不能是另一字元編碼的前綴,這種編碼稱為前綴編碼(其實是非前綴碼)。 在編碼過程要考慮兩個問題,數據的最小冗餘編碼問題,解碼的惟一性問題,利用最優二叉樹可以很好地解決上述兩個問題

以電文中的字元作為葉子結點構造二叉樹。然後將二叉樹中結點引向其左孩子的分支標 『0』,引向其右孩子的分支標 『1』; 每個字元的編碼即為從根到每個葉子的路徑上得到的 0, 1 序列。如此得到的即為二進制前綴編碼。

編碼: A:0, C:10,B:110,D:111

任意一個葉子結點都不可能在其它葉子結點的路徑中。

用哈夫曼樹設計總長最短的二進制前綴編碼

例:如果需傳送的電文為 『ABACCDA』,即:A, B, C, D 的頻率(即權值)分別為 0.43, 0.14, 0.29, 0.14,試構造哈夫曼編碼。

編碼: A:0, C:10, B:110, D:111 。電文 『ABACCDA』 便為 『0110010101110』(共 13 位)。

解碼
從哈夫曼樹根開始,對待解碼電文逐位取碼。若編碼是「0」,則向左走;若編碼是「1」,則向右走,一旦到達葉子結點,則譯出一個字元;再重新從根出發,直到電文結束。

電文為 「1101000」 ,譯文只能是「CAT」

③ dede5.5如何開啟gzip壓縮功能

需要伺服器開啟GZIP
伺服器開啟GIZP的步驟如下:
1、修改php.ini文件
找到
extension=php_zip.dll
把前面的分號去掉然後保存文件
2、復制你php的安裝目錄下
ext文件夾下的
php_zip.dll到系統所在盤
windows目錄下system32文件夾下
3、重啟伺服器

④ linux 中 用gzip 如何壓縮目錄

linux 中用gzip 壓縮目錄步驟如下:

1、打開linux客戶端。

⑤ 如何啟用網頁GZIP壓縮

下面」舒宇卓創站長「將和大家一起分享一下,希望對咱們站長有所幫助! 1.開啟網頁GZIP壓縮有什麼好處? Gzip開啟以後會將輸出到用戶瀏覽器的數據進行壓縮的處理,這樣就會減小通過網路傳輸的數據量,提高瀏覽的速度。 進而對於搜索引擎的收錄也有一定的好處,也大大提高了我們的用戶體驗度。 2.如何啟用IIS的Gzip壓縮功能: 首先要有網站管理許可權和伺服器遠程管理許可權 步驟如下: 第一、如果你需要壓縮靜態文件(HTML),需要在硬碟上建一個目錄,並給它「IUSR_機器名」這個用戶的寫許可權。如果壓縮動態文件(PHP,asp,aspx)就不需要了,因為它的頁面是每次都動態生成的,壓縮完就放棄。打開Internet信息服務(IIS)管理器,右擊「網站」—>「屬性」(注意:這里的網站是整個網站文件不是某個網站目錄),之後選擇「服務」。在「HTTP壓縮」框中選中「壓縮應用程序文件」和「壓縮靜態文件」,按需要設置「臨時目錄」和「臨時目錄的最大限制」。 第二、在Internet信息服務(IIS)管理器,右擊「Web服務擴展」—>「增加一個新的Web服務擴展」,在「新建Web服務擴展」框中輸入擴展名「HTTP Compression」,添加「要求的文件」為C:\WINDOWS\system32\inetsrv\gzip.dll,其中Windows系統目錄根據您的安裝可能有所不同,選中「設置擴展狀態為允許」;這時候靜態內容是可以壓縮的,但是對於動態內容,aspx文件卻不在壓縮范圍內。因為默認的可壓縮文件並沒有這個擴展名。而管理界面中你又找不到可以增加擴展名的地方,這時候只能去修改它的配置文件了。 第三、使用文本編輯器打開C:\Windows\System32\inetsrv\MetaBase.xml(建議先備份),查找 IIsCompressionScheme標簽,有三個相同名字的段,分別是deflate,gzip,Parameters,第三段不用管它,前兩段有基本相同的參數,HcDynamicCompressionLevel,設置壓縮率,取值0~10,0不壓縮,10最高壓縮率,這里設置成9,9是性價比最高的一個。HcFileExtensions,需要壓縮的靜態文件擴展名,默認只有htm,html,txt,可以把js,css,xml添加進去。建議按原來的格式,用換行作為分隔。

閱讀全文

與dedegzip壓縮相關的資料

熱點內容
linuxsftp連接 瀏覽:934
光伏日發電量演算法 瀏覽:125
小肚皮app怎麼才有vip 瀏覽:616
php全形轉換半形 瀏覽:927
java字元序列 瀏覽:539
杭州編譯分布式存儲區塊鏈 瀏覽:575
材料壓縮曲線 瀏覽:247
linux命令排序 瀏覽:151
手機熱點加密為啥連接不上電腦 瀏覽:979
編譯器合並計算 瀏覽:959
android音頻曲線 瀏覽:343
linuxftp自動登錄 瀏覽:802
運行編譯後網頁 瀏覽:70
閱讀app怎麼使用 瀏覽:319
centos防火牆命令 瀏覽:432
命令行變更 瀏覽:332
linux設備和驅動 瀏覽:207
加密貨幣騙局破案 瀏覽:345
cc特徵碼加密 瀏覽:775
清空dns緩存命令 瀏覽:295