Node.js實(shí)現(xiàn)壓縮與解壓數(shù)據(jù)
Node.js中提供了一個很好的庫Zlib來壓縮解壓數(shù)據(jù)。
一、壓縮緩沖區(qū)
Zlib中有下面幾個函數(shù)方便解壓縮緩沖區(qū).
- gzip/gunzip:標(biāo)準(zhǔn)gzip壓縮.
- deflate/inflate:基于Huffman編碼的標(biāo)準(zhǔn)deflate壓縮算法。
- deflateRaw/inflateRaw:針對原始緩沖區(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()將壓縮/解壓對象從一個流輸送到另一個流。
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ù)的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
kafka調(diào)試中遇到Connection to node -1 could not be established. Br
這篇文章主要介紹了kafka調(diào)試中遇到Connection to node -1 could not be established. Broker may not be available的解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-09-09
Node.js應(yīng)用設(shè)置安全的沙箱環(huán)境
這篇文章主要介紹了Node.js應(yīng)用設(shè)置安全的沙箱環(huán)境的方法以及注意事項(xiàng),對此有需要的朋友可以參考學(xué)習(xí)下。2018-04-04
解決node.js含有%百分號時(shí)發(fā)送get請求時(shí)瀏覽器地址自動編碼的問題
這篇文章主要介紹了解決node.js含有%百分號時(shí)發(fā)送get請求時(shí)瀏覽器地址自動編碼的問題,非常不錯,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11
node.js使用net模塊創(chuàng)建服務(wù)器和客戶端示例【基于TCP協(xié)議】
這篇文章主要介紹了node.js使用net模塊創(chuàng)建服務(wù)器和客戶端,結(jié)合實(shí)例形式分析了node.js使用net模塊實(shí)現(xiàn)TCP客戶端與服務(wù)器端通信的相關(guān)操作技巧,需要的朋友可以參考下2020-02-02
Node.js16.15.1的一個報(bào)錯以及解決方案分享
這篇文章主要給大家介紹了關(guān)于Node.js16.15.1的一個報(bào)錯以及解決方案的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-12-12
express框架實(shí)現(xiàn)基于Websocket建立的簡易聊天室
本篇文章主要介紹了express框架實(shí)現(xiàn)基于Websocket建立的簡易聊天室,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08

