Node.js實(shí)現(xiàn)壓縮與解壓數(shù)據(jù)
Node.js中提供了一個(gè)很好的庫(kù)Zlib來壓縮解壓數(shù)據(jù)。
一、壓縮緩沖區(qū)
Zlib中有下面幾個(gè)函數(shù)方便解壓縮緩沖區(qū).
- gzip/gunzip:標(biāo)準(zhǔn)gzip壓縮.
- deflate/inflate:基于Huffman編碼的標(biāo)準(zhǔn)deflate壓縮算法。
- deflateRaw/inflateRaw:針對(duì)原始緩沖區(qū)的deflate壓縮算法。
它們的函數(shù)都是function(buffer,callback).
var zlib = require("zlib");
var input = '...............text...............';
zlib.deflate(input, function(err, buffer) {
if (!err) {
console.log("deflate (%s): ", buffer.length, buffer.toString('base64'));
zlib.inflate(buffer, function(err, buffer) {
if (!err) {
console.log("inflate (%s): ", buffer.length, buffer.toString());
}
});
zlib.unzip(buffer, function(err, buffer) {
if (!err) {
console.log("unzip deflate (%s): ", buffer.length, buffer.toString());
}
});
}
});
zlib.deflateRaw(input, function(err, buffer) {
if (!err) {
console.log("deflateRaw (%s): ", buffer.length, buffer.toString('base64'));
zlib.inflateRaw(buffer, function(err, buffer) {
if (!err) {
console.log("inflateRaw (%s): ", buffer.length, buffer.toString());
}
});
}
});
zlib.gzip(input, function(err, buffer) {
if (!err) {
console.log("gzip (%s): ", buffer.length, buffer.toString('base64'));
zlib.gunzip(buffer, function(err, buffer) {
if (!err) {
console.log("gunzip (%s): ", buffer.length, buffer.toString());
}
});
zlib.unzip(buffer, function(err, buffer) {
if (!err) {
console.log("unzip gzip (%s): ", buffer.length, buffer.toString());
}
});
}
});輸出結(jié)果:
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe zlib_buffers.js
deflate (18): eJzT00MBJakVJagiegB9Zgcq
deflateRaw (12): 09NDASWpFSWoInoA
gzip (30): H4sIAAAAAAAAC9PTQwElqRUlqCJ6AIq+x+AiAAAA
inflate (34): ...............text...............
unzip deflate (34): ...............text...............
inflateRaw (34): ...............text...............
gunzip (34): ...............text...............
unzip gzip (34): ...............text...............Process finished with exit code 0
二、壓縮文件
可通過pipe()將壓縮/解壓對(duì)象從一個(gè)流輸送到另一個(gè)流。
var zlib = require("zlib");
var gzip = zlib.createGzip();
var fs = require('fs');
var inFile = fs.createReadStream('zlib_file.js');
var outFile = fs.createWriteStream('zlib_file.gz');
inFile.pipe(gzip).pipe(outFile);
setTimeout(function(){
var gunzip = zlib.createUnzip({flush: zlib.Z_FULL_FLUSH});
var inFile = fs.createReadStream('zlib_file.gz');
var outFile = fs.createWriteStream('zlib_file.unzipped');
inFile.pipe(gunzip).pipe(outFile);
}, 3000);上面代碼中前面是readable流通過pipe使用壓縮zlib.createGzip()然后輸出到writeable中。后面的是解壓的過程。
到此這篇關(guān)于Node.js實(shí)現(xiàn)壓縮與解壓數(shù)據(jù)的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Nest.js中使用HTTP五種數(shù)據(jù)傳輸方式小結(jié)
本文主要介紹了Nest.js中使用HTTP五種數(shù)據(jù)傳輸方式小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
Node.js實(shí)現(xiàn)簡(jiǎn)單聊天服務(wù)器
Node.js 是一個(gè)基于Chrome JavaScript運(yùn)行時(shí)建立的一個(gè)平臺(tái), 用來方便地搭建快速的,易于擴(kuò)展的網(wǎng)絡(luò)應(yīng)用,今天我們來探討下,如何使用node.js實(shí)現(xiàn)簡(jiǎn)單的聊天服務(wù)器2014-06-06
node.JS二進(jìn)制操作模塊buffer對(duì)象使用方法詳解
在ES6引入TypedArray之前,JavaScript語言沒有讀取或操作二進(jìn)制數(shù)據(jù)流的機(jī)制,本文為大家詳細(xì)介紹nodeJS中二進(jìn)制操作模塊buffer對(duì)象使用方法詳解2020-02-02
詳解nodejs微信公眾號(hào)開發(fā)——1.接入微信公眾號(hào)
本篇文章主要介紹了詳解nodejs微信公眾號(hào)開發(fā)——1.接入微信公眾號(hào),非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-04-04
node.js使用yargs處理命令行參數(shù)操作示例
這篇文章主要介紹了node.js使用yargs處理命令行參數(shù)操作,結(jié)合實(shí)例形式分析了yargs庫(kù)的安裝及node.js使用yargs處理命令行參數(shù)具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2020-02-02

