摘要:壓縮與解壓縮處理在中,可以使用模塊進行壓縮及解壓縮處理創建各種用于壓縮及解壓縮的對象方法說明該方法創建并返回一個對象該對象使用算法對數據進行壓縮處理該方法創建并返回一個對象該對象使用算法對數據進行壓縮處理該方法創建并返回一個對象該對象使用算
壓縮與解壓縮處理
在Node.js中,可以使用zlib模塊進行壓縮及解壓縮處理.
1. 創建各種用于壓縮及解壓縮的對象方法 | 說明 |
---|---|
zlib.createGzip([options]) | 該方法創建并返回一個Gzip對象,該對象使用Gzip算法對數據進行壓縮處理 |
zlib.createDeflate([options]) | 該方法創建并返回一個Deflate對象,該對象使用Deflate算法對數據進行壓縮處理 |
zlib.createDeflateRaw([options]) | 該方法創建并返回一個DeflateRaw對象,該對象使用DeflateRaw算法對數據進行壓縮處理 |
zlib.createGunzip([options]) | 該方法創建并返回一個Gunzip對象,該對象使用Gunzip算法對數據進行壓縮處理 |
zlib.createInflate([options]) | 該方法創建并返回一個Inflate對象,該對象使用Inflate算法對數據進行壓縮處理 |
zlib.createInflateRaw([options]) | 該方法創建并返回一個InflateRaw對象,該對象使用InflateRaw算法對數據進行壓縮處理 |
zlib.createUnzip([options]) | 該方法創建并返回一個Inflate對象,該對象使用Inflate算法對數據進行壓縮處理,也可以對使用Deflate算法進行壓縮的數據進行解壓處理,根據壓縮數據中的zlib頭來判斷該數據是使用哪一種算法進行壓縮的數據 |
每個方法所創建的對象均為一個既可用于讀取流數據的對象,又可以用于寫入流數據的對象.
各個方法均采用一個可選的options參數,該參數為一個對象,用于指定壓縮或者解壓縮數據時所使用的選項.
flush: 用于設定或讀取壓縮方法及狀態
zlib.Z_NO_FLUSH,flush的默認屬性值,該模式運行在數據被輸出之前,預先決定每次壓縮多少數據,以實現最大化壓縮.
zlib.Z_SYNC_FLUS,該屬性值用于指定將壓縮數據分為若干個壓縮快,每次將一個壓縮塊中的數據寫入輸出緩存區,然后在數據塊后面寫入一個10位長度的空白數據塊.當使用某些壓縮算法時,這種模式可能會降低數據的壓縮程序,因此只應該使用在必須使用的場合.
zlib.Z_FULL_FLUSH,與Z_SYNC_FLUSH相同,該屬性值用于指定將壓縮數據分為若干個壓縮快,每次將一個壓縮塊中的數據寫入輸出緩存區,然后在數據塊后面寫入一個10位長度的空白數據塊.但在數據塊寫完后復位壓縮狀態,因此,當壓縮的數據流被管道輸出時,解壓縮該數據的另一端可以在前一次數據被破壞時`要求重新壓縮.
zlib.Z_PARTIAL_FLUSH, 該屬性值用于指定在壓縮數據時每次都將輸出緩存區所能容納的數據寫入輸出緩存區,不限制輸出數據的字節數.
zlib.Z_FINISH,當屬性值為zlib.Z_FINISH時,輸出緩存區中的剩余數據將被全部輸出.
chunkSize: 用于設定將數據分塊時每個塊的大小,單位為字節,默認屬性值為16*1024
windowBits: 該屬性值以2位底數所求出的壓縮窗口的對數,用于設定壓縮窗口的大小,屬性值在8-15之間,默認為15,屬性值越大,壓縮效果越好,但是內存消耗越多,當使用deflate算法壓縮數據且在壓縮數據中不使用zlib頭時,屬性值也可以為-15~-8的數值.
level: 該屬性值為整數值,用于指定壓縮級別,屬性值可以為-1或0-9的數值.當屬性值為0時,不執行壓縮處理,當屬性值為1時,壓縮速度最快,壓縮程度最低.當屬性值為-1時,表示使用默認壓縮比,該屬性值自動打壓縮速度和壓縮程度之間進行妥協(大多數場合中妥協的結果相當于將level屬性值設定為6)
memLevel: 該屬性值用于指定在進行壓縮時為壓縮程序分配多少內存,屬性值為1-9之間的證書,當該屬性值為1時,消耗最少的內存,但是壓縮程度被降低,當屬性值為9時,消耗最多的內存,但是壓縮效果最好,默認屬性值為8.
strategy: 該屬性值用于調整壓縮算法
zlib.Z_DEFAULT_STARTEGY,該屬性值為默認屬性值,用于進行標準壓縮.
zlib.Z_HUFFMAN_ONLY,該屬性值用于指定在壓縮數據時使用霍夫曼編碼(Huffman Coding).霍夫曼編碼是一種用于無損數據壓縮的熵編碼(又稱為權編碼)
zlib.Z_FILTERED,該屬性值用于在壓縮數據時對數據進行過濾,以達到更好的壓縮效果
zlib.Z_RLE,該屬性值用于指定在壓縮時游程編碼(Run-Length Encoding,RLE),游程編碼又稱行程長度編碼,該編碼對連讀的黑白像素數(游程)以不同的碼字進行編碼,游程編碼是一種簡單的非破壞性資料壓縮法,其好處是壓縮和解壓縮都非常快,其方法是計算連續出現的資料長度壓縮,其缺點是對于不重復的資料反而加大容量,當對PNG圖像進行壓縮時,游程編碼可以達到最佳的壓縮效果.
zlib.Z_FIXED,該屬性值用于指定在壓縮過程中禁止使用霍夫曼編碼,以達到在特殊的應用程序中簡化解碼過程的目的.
由于Gzip對象,Deflate對象與DeflateRaw對象既可以用于讀取流數據,又可以用于寫入流數據,因此,可以直接使用這些ReadStream對象的pipe方法將文件流數據輸出到Gzip對象,Deflate對象與DeflateRaw對象中,再使用這些對象的pipe方法將使用這些對象進行壓縮后的流數據輸出到另一個壓縮文件中.
使用Gzip對象壓縮文件
const zlib = require("zlib"); const fs = require("fs"); let gzip = zlib.createGzip(); let inp = fs.createReadStream("file.txt"); let out = fs.createWriteStream("file.txt.gz"); inp.pipe(gzip).pipe(out);
由于Gunzip對象,Inflate對象,InflateRaw對象與Unzip對象既可以讀取流數據,又可以用于寫入流數據。因此,可以直接使用這些ReadStream對象的pipe方法讀取壓縮文件中的數據并將其輸出到Gunzip對象,Inflate對象,InflateRaw對象或Unzip對象中,再使用這些對象的pipe方法將使用這些對象進行解壓縮后的流數據還原到一個文件中.
使用Gunzip對象解壓縮文件
const zlib = require("zlib"); const fs =require("fs"); let gunzip = zlib.createGunzip(); let inp = fs.createReadStream("./file.txt.gz"); let out = fs.createWriteStream("file.txt"); inp.pipe(gunzip).pipe(out);
在HTTP服務器端與HTTP客戶端之間傳輸壓縮數據時,在客戶端請求頭中需要使用accept-encoding字段指定服務器端壓縮數據時使用的壓縮算法,在服務器端響應頭中應使用content-encoding字段聲明服務器端響應數據的壓縮算法.
2. zlib模塊中的各種方法在zlib模塊中,除了各種用于創建對數據進行壓縮及解壓縮處理的方法之外,還提供了很多的方法,所有這些方法的第一個參數值均為一個字符串或一個Buffer對象,在防范內部對該字符串或Buffer對象所引用的緩存區中的數據進行壓縮或解壓縮.在這些方法中不使用options參數,所有這些方法的第二個參數值均為一個回調函數,用于指定壓縮或解壓縮數據結束時需要執行的處理,該回調函數中的第一個參數值為壓縮或解壓縮數據失敗時觸發的錯誤對象,該回調函數中的第二個參數值為一個Buffer對象,該Buffer對象為所引用的緩存區中存放了壓縮或解壓縮后的數據.
各種用于壓縮或解壓縮數據的方法
方法 | 說明 |
---|---|
zlib.zgip(buf, callback(err, buf){..}) | 使用Gzip算法壓縮buf字符串或buf緩存區中的數據 |
zlib.deflate(buf, callback(err, buf){..}) | 使用Deflate算法壓縮buf字符串或buf緩存區中的數據 |
zlib.deflateRaw(buf, callback(err, buf){..}) | 使用Deflate算法壓縮buf字符串或buf緩存區中的數據,在壓縮數據中不添加zlib頭 |
zlib.gunzip(buf, callback(err, buf){..}) | 使用Gunzip算法壓縮buf字符串或buf緩存區中的數據 |
zlib.inflate(buf, callback(err, buf){..}) | 使用Inflate算法壓縮buf字符串或buf緩存區中的數據 |
zlib.inflateRaw(buf, callback(err, buf){..}) | 使用inflateRaw算法壓縮buf字符串或buf緩存區中的數據,在壓縮數據中不添加zlib頭 |
zlib.unzip(buf, callback(err, buf){..}) | 該方法可使用Gunzip算法解壓縮buf緩存區中的數據,又可使用Inflate算法解壓縮buf緩存區中的數據,根據壓縮數據中的zlib頭來判斷使用哪一種算法解壓縮數據 |
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/92995.html
摘要:常用的對象的屬性和瀏覽器環境和環境下都可以正常輸出,功能類似和普通的分類輸出,如果參數不為錯誤那么瀏覽器端發出警告信息和錯誤內容那么環境下輸出的是普通正常內容環境下報錯前端,可以使用的插件,在需要的地方,直接輸入就可以停在這里后端,直接使用 常用的Console對象的屬性 1. console.log()和console.info() 瀏覽器環境和Node環境下都可以正常輸出,功能類...
6. 目錄操作 6.1 創建目錄 如果存在該目錄,就創建失敗 同步創建目錄fs.mkdirSync(path, [mode]) const fs = require(fs); let mkdir = ./mkdir; fs.mkdir(mkdir, (err) => { if (err) { console.log(`mkdir ${mkdir} file faile...
摘要:在線地址現在新用戶購買阿里云服務器年只要啦。。開放端口登陸阿里云,進入控制管理臺云服務器安全組配置規則快速創建規則啟動服務瀏覽器打開服務器如,如無意外,即正常運行訪問啦。 在線地址: cl8023.com github 現在新用戶購買阿里云服務器 3年只要398啦。。https://m.aliyun.com/act/team... 云服務器 阿里云 or 騰訊云 阿里云服務器品牌:...
摘要:中各種用于讀取數據的對象對象描述用于讀取文件代表客戶端請求或服務器端響應代表一個端口對象用于創建子進程的標準輸出流。如果子進程和父進程共享輸入輸出流,則子進程的標準輸出流被廢棄用于創建子進程的標準錯誤輸出流。 9. stream流 fs模塊中集中文件讀寫方法的區別 用途 使用異步方式 使用同步方式 將文件完整讀入緩存區 readFile readFileSync 將文件部...
摘要:基本介紹這是一個基本的環境搭建不同的操作系統可以選擇不同的安裝方式如果不需要太多的安裝步驟就直接在官網下載最新版安裝包進行安裝即可環境配置必須安裝的軟件更改源與更新系統首先備份下載的源配置文件運行生成緩存更新系統安裝使用安裝命 基本介紹 這是一個基本的Node.js環境搭建,不同的操作系統可以選擇不同的安裝方式 如果不需要太多的安裝步驟,就直接在Node.js官網下載最新版安裝包進行...
閱讀 1408·2021-09-23 11:21
閱讀 3105·2019-08-30 14:14
閱讀 3187·2019-08-30 13:56
閱讀 4136·2019-08-30 11:20
閱讀 1949·2019-08-29 17:23
閱讀 2765·2019-08-29 16:14
閱讀 1693·2019-08-28 18:18
閱讀 1490·2019-08-26 12:14