Node.js中提供了一个很好的库Zlib来压缩解压数据。

一、压缩缓冲区

Zlib中有下面几个函数方便解压缩缓冲区.

gzip/gunzip:标准gzip压缩.

deflate/inflate:基于Huffman编码的标准deflate压缩算法。

deflateRaw/inflateRaw:针对原始缓冲区的deflate压缩算法。

它们的函数都是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());
}
});
}
});
"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中。后面的是解压的过程。

最新文章

  1. How To Install Java on CentOS and Fedora
  2. man curl_easy_perform(原创)
  3. java面试中问题
  4. BZOJ3757 : 苹果树
  5. HDU 1885 Key Task(三维BFS)
  6. 10个android开源项目
  7. hpu第五届acm比赛
  8. springboot v2.0.3版本多数据源配置
  9. 【题解】Luogu P3674 小清新人渣的本愿
  10. TopCoder SRM500 Div1 1000 其他
  11. luogu1984 烧水问题 (找规律)
  12. 刚开始学java和刚去工作的时候,1.path路径 2.classpath路径 还有JAVA_HOME相当于/dgs这个路径
  13. jQuery 与js判断是否单选复选选中
  14. 【转】1.2 CDN的基本工作过程
  15. FIDDLER的使用方法及技巧总结(连载一)FIDDLER快速入门及使用场景
  16. vue-router路由器的使用
  17. golang中从一个日期开始往后增加一段时间
  18. 以iphone6plus 为标准单位是px的页面 在运行时转换为rem
  19. 骑士精神(IDA*)
  20. Circle Problem From 3Blue1Brown (分圆问题)

热门文章

  1. mui关闭侧滑
  2. reids 安装
  3. c# 1-2+3-4.....求和
  4. “全栈2019”Java多线程第二十章:同步方法产生死锁的例子
  5. Java Web相关技术(汇聚页)
  6. uiautomator2
  7. SVN图形客户端上传静态库.a文件失败
  8. leetcode-914-卡牌分组
  9. 【BZOJ1502】【NOI2005】月下柠檬树 simpson 积分
  10. WebAPI Post接收数据