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