成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Node.js學習之路18——壓縮與解壓

tigerZH / 3650人閱讀

摘要:壓縮與解壓縮處理在中,可以使用模塊進行壓縮及解壓縮處理創(chuàng)建各種用于壓縮及解壓縮的對象方法說明該方法創(chuàng)建并返回一個對象該對象使用算法對數(shù)據(jù)進行壓縮處理該方法創(chuàng)建并返回一個對象該對象使用算法對數(shù)據(jù)進行壓縮處理該方法創(chuàng)建并返回一個對象該對象使用算

壓縮與解壓縮處理

Node.js中,可以使用zlib模塊進行壓縮及解壓縮處理.

1. 創(chuàng)建各種用于壓縮及解壓縮的對象
方法 說明
zlib.createGzip([options]) 該方法創(chuàng)建并返回一個Gzip對象,該對象使用Gzip算法對數(shù)據(jù)進行壓縮處理
zlib.createDeflate([options]) 該方法創(chuàng)建并返回一個Deflate對象,該對象使用Deflate算法對數(shù)據(jù)進行壓縮處理
zlib.createDeflateRaw([options]) 該方法創(chuàng)建并返回一個DeflateRaw對象,該對象使用DeflateRaw算法對數(shù)據(jù)進行壓縮處理
zlib.createGunzip([options]) 該方法創(chuàng)建并返回一個Gunzip對象,該對象使用Gunzip算法對數(shù)據(jù)進行壓縮處理
zlib.createInflate([options]) 該方法創(chuàng)建并返回一個Inflate對象,該對象使用Inflate算法對數(shù)據(jù)進行壓縮處理
zlib.createInflateRaw([options]) 該方法創(chuàng)建并返回一個InflateRaw對象,該對象使用InflateRaw算法對數(shù)據(jù)進行壓縮處理
zlib.createUnzip([options]) 該方法創(chuàng)建并返回一個Inflate對象,該對象使用Inflate算法對數(shù)據(jù)進行壓縮處理,也可以對使用Deflate算法進行壓縮的數(shù)據(jù)進行解壓處理,根據(jù)壓縮數(shù)據(jù)中的zlib頭來判斷該數(shù)據(jù)是使用哪一種算法進行壓縮的數(shù)據(jù)

每個方法所創(chuàng)建的對象均為一個既可用于讀取流數(shù)據(jù)的對象,又可以用于寫入流數(shù)據(jù)的對象.

各個方法均采用一個可選的options參數(shù),該參數(shù)為一個對象,用于指定壓縮或者解壓縮數(shù)據(jù)時所使用的選項.

flush: 用于設(shè)定或讀取壓縮方法及狀態(tài)

zlib.Z_NO_FLUSH,flush的默認屬性值,該模式運行在數(shù)據(jù)被輸出之前,預(yù)先決定每次壓縮多少數(shù)據(jù),以實現(xiàn)最大化壓縮.

zlib.Z_SYNC_FLUS,該屬性值用于指定將壓縮數(shù)據(jù)分為若干個壓縮快,每次將一個壓縮塊中的數(shù)據(jù)寫入輸出緩存區(qū),然后在數(shù)據(jù)塊后面寫入一個10位長度的空白數(shù)據(jù)塊.當使用某些壓縮算法時,這種模式可能會降低數(shù)據(jù)的壓縮程序,因此只應(yīng)該使用在必須使用的場合.

zlib.Z_FULL_FLUSH,與Z_SYNC_FLUSH相同,該屬性值用于指定將壓縮數(shù)據(jù)分為若干個壓縮快,每次將一個壓縮塊中的數(shù)據(jù)寫入輸出緩存區(qū),然后在數(shù)據(jù)塊后面寫入一個10位長度的空白數(shù)據(jù)塊.但在數(shù)據(jù)塊寫完后復(fù)位壓縮狀態(tài),因此,當壓縮的數(shù)據(jù)流被管道輸出時,解壓縮該數(shù)據(jù)的另一端可以在前一次數(shù)據(jù)被破壞時`要求重新壓縮.

zlib.Z_PARTIAL_FLUSH, 該屬性值用于指定在壓縮數(shù)據(jù)時每次都將輸出緩存區(qū)所能容納的數(shù)據(jù)寫入輸出緩存區(qū),不限制輸出數(shù)據(jù)的字節(jié)數(shù).

zlib.Z_FINISH,當屬性值為zlib.Z_FINISH時,輸出緩存區(qū)中的剩余數(shù)據(jù)將被全部輸出.

chunkSize: 用于設(shè)定將數(shù)據(jù)分塊時每個塊的大小,單位為字節(jié),默認屬性值為16*1024

windowBits: 該屬性值以2位底數(shù)所求出的壓縮窗口的對數(shù),用于設(shè)定壓縮窗口的大小,屬性值在8-15之間,默認為15,屬性值越大,壓縮效果越好,但是內(nèi)存消耗越多,當使用deflate算法壓縮數(shù)據(jù)且在壓縮數(shù)據(jù)中不使用zlib頭時,屬性值也可以為-15~-8的數(shù)值.

level: 該屬性值為整數(shù)值,用于指定壓縮級別,屬性值可以為-10-9的數(shù)值.當屬性值為0時,不執(zhí)行壓縮處理,當屬性值為1時,壓縮速度最快,壓縮程度最低.當屬性值為-1時,表示使用默認壓縮比,該屬性值自動打壓縮速度和壓縮程度之間進行妥協(xié)(大多數(shù)場合中妥協(xié)的結(jié)果相當于將level屬性值設(shè)定為6)

memLevel: 該屬性值用于指定在進行壓縮時為壓縮程序分配多少內(nèi)存,屬性值為1-9之間的證書,當該屬性值為1時,消耗最少的內(nèi)存,但是壓縮程度被降低,當屬性值為9時,消耗最多的內(nèi)存,但是壓縮效果最好,默認屬性值為8.

strategy: 該屬性值用于調(diào)整壓縮算法

zlib.Z_DEFAULT_STARTEGY,該屬性值為默認屬性值,用于進行標準壓縮.

zlib.Z_HUFFMAN_ONLY,該屬性值用于指定在壓縮數(shù)據(jù)時使用霍夫曼編碼(Huffman Coding).霍夫曼編碼是一種用于無損數(shù)據(jù)壓縮的熵編碼(又稱為權(quán)編碼)

zlib.Z_FILTERED,該屬性值用于在壓縮數(shù)據(jù)時對數(shù)據(jù)進行過濾,以達到更好的壓縮效果

zlib.Z_RLE,該屬性值用于指定在壓縮時游程編碼(Run-Length Encoding,RLE),游程編碼又稱行程長度編碼,該編碼對連讀的黑白像素數(shù)(游程)以不同的碼字進行編碼,游程編碼是一種簡單的非破壞性資料壓縮法,其好處是壓縮和解壓縮都非??欤浞椒ㄊ怯嬎氵B續(xù)出現(xiàn)的資料長度壓縮,其缺點是對于不重復(fù)的資料反而加大容量,當對PNG圖像進行壓縮時,游程編碼可以達到最佳的壓縮效果.

zlib.Z_FIXED,該屬性值用于指定在壓縮過程中禁止使用霍夫曼編碼,以達到在特殊的應(yīng)用程序中簡化解碼過程的目的.

由于Gzip對象,Deflate對象與DeflateRaw對象既可以用于讀取流數(shù)據(jù),又可以用于寫入流數(shù)據(jù),因此,可以直接使用這些ReadStream對象的pipe方法將文件流數(shù)據(jù)輸出到Gzip對象,Deflate對象與DeflateRaw對象中,再使用這些對象的pipe方法將使用這些對象進行壓縮后的流數(shù)據(jù)輸出到另一個壓縮文件中.

使用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方法將使用這些對象進行解壓縮后的流數(shù)據(jù)還原到一個文件中.

使用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ù)時,在客戶端請求頭中需要使用accept-encoding字段指定服務(wù)器端壓縮數(shù)據(jù)時使用的壓縮算法,在服務(wù)器端響應(yīng)頭中應(yīng)使用content-encoding字段聲明服務(wù)器端響應(yīng)數(shù)據(jù)的壓縮算法.

2. zlib模塊中的各種方法

zlib模塊中,除了各種用于創(chuàng)建對數(shù)據(jù)進行壓縮及解壓縮處理的方法之外,還提供了很多的方法,所有這些方法的第一個參數(shù)值均為一個字符串或一個Buffer對象,在防范內(nèi)部對該字符串或Buffer對象所引用的緩存區(qū)中的數(shù)據(jù)進行壓縮或解壓縮.在這些方法中不使用options參數(shù),所有這些方法的第二個參數(shù)值均為一個回調(diào)函數(shù),用于指定壓縮或解壓縮數(shù)據(jù)結(jié)束時需要執(zhí)行的處理,該回調(diào)函數(shù)中的第一個參數(shù)值為壓縮或解壓縮數(shù)據(jù)失敗時觸發(fā)的錯誤對象,該回調(diào)函數(shù)中的第二個參數(shù)值為一個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://systransis.cn/yun/92995.html

相關(guān)文章

  • Node.js學習之路02——常用的Console對象的屬性

    摘要:常用的對象的屬性和瀏覽器環(huán)境和環(huán)境下都可以正常輸出,功能類似和普通的分類輸出,如果參數(shù)不為錯誤那么瀏覽器端發(fā)出警告信息和錯誤內(nèi)容那么環(huán)境下輸出的是普通正常內(nèi)容環(huán)境下報錯前端,可以使用的插件,在需要的地方,直接輸入就可以停在這里后端,直接使用 常用的Console對象的屬性 1. console.log()和console.info() 瀏覽器環(huán)境和Node環(huán)境下都可以正常輸出,功能類...

    elina 評論0 收藏0
  • Node.js學習之路06——fs文件系統(tǒng)之目錄操作文件信息

    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...

    用戶83 評論0 收藏0
  • vue+node項目部署上線

    摘要:在線地址現(xiàn)在新用戶購買阿里云服務(wù)器年只要啦。。開放端口登陸阿里云,進入控制管理臺云服務(wù)器安全組配置規(guī)則快速創(chuàng)建規(guī)則啟動服務(wù)瀏覽器打開服務(wù)器如,如無意外,即正常運行訪問啦。 在線地址: cl8023.com github 現(xiàn)在新用戶購買阿里云服務(wù)器 3年只要398啦。。https://m.aliyun.com/act/team... 云服務(wù)器 阿里云 or 騰訊云 阿里云服務(wù)器品牌:...

    Alliot 評論0 收藏0
  • Node.js學習之路08——fs文件系統(tǒng)之stream流的基本介紹

    摘要:中各種用于讀取數(shù)據(jù)的對象對象描述用于讀取文件代表客戶端請求或服務(wù)器端響應(yīng)代表一個端口對象用于創(chuàng)建子進程的標準輸出流。如果子進程和父進程共享輸入輸出流,則子進程的標準輸出流被廢棄用于創(chuàng)建子進程的標準錯誤輸出流。 9. stream流 fs模塊中集中文件讀寫方法的區(qū)別 用途 使用異步方式 使用同步方式 將文件完整讀入緩存區(qū) readFile readFileSync 將文件部...

    BoYang 評論0 收藏0
  • Node.js學習之路01——不同操作系統(tǒng)下Node.js環(huán)境搭建

    摘要:基本介紹這是一個基本的環(huán)境搭建不同的操作系統(tǒng)可以選擇不同的安裝方式如果不需要太多的安裝步驟就直接在官網(wǎng)下載最新版安裝包進行安裝即可環(huán)境配置必須安裝的軟件更改源與更新系統(tǒng)首先備份下載的源配置文件運行生成緩存更新系統(tǒng)安裝使用安裝命 基本介紹 這是一個基本的Node.js環(huán)境搭建,不同的操作系統(tǒng)可以選擇不同的安裝方式 如果不需要太多的安裝步驟,就直接在Node.js官網(wǎng)下載最新版安裝包進行...

    meteor199 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<