Nodejs文件的压缩与解压===使用管道实现

 本文转载自:https://blog.csdn.net/u013127751/article/details/78537957

//所有的 Stream 对象都是 EventEmitter 的实例,所以可以使用EventEmitter类的方法

/*
 * 从流中读取数据
 */
var fs = require("fs");
var data = '';
//创建可读流
var readerStream = fs.createReadStream('input.txt');
//设置编码
readerStream.setEncoding('UTF8');
//处理事件流
readerStream.on('data', function (chunk) {
    console.log(" 当有数据可读时触发:\n" + chunk);
});
readerStream.on('end', function () {
    console.log("没有更多的数据可读时触发!");
});
readerStream.on('error', function (err) {
    console.log("在接收和写入过程中发生错误时触发:" + err.stack);
});
console.log("程序执行完毕");  //这还是一个异步操作,不阻塞的案例

/*
 * 写入流
 */
var writeStream = fs.createWriteStream('output.txt');
writeStream.write('测试写入流的数据', 'UTF8');
writeStream.end();  //标记文件末尾
writeStream.on('finish', function () {
    console.log("所有数据已被写入到底层系统时触发!");
});
writeStream.on('error', function (err) {
    console.log("在接收和写入过程中发生错误时触发:" + err.stack);
});

/*
 * 管道流
 */
var readStream = fs.createReadStream('input.txt');
var writerStream = fs.createWriteStream('output.txt');
readStream.pipe(writerStream);//管到读写,只会将output.txt对于位置修改,超出input.txt长度的部分不会修改
console.log("程序执行完毕");

/*
 * 链式流
 * 用管道和链式来压缩和解压文件
 */
//压缩:将未压缩文件通过管道读入,经过gzip压缩,再由管道写出为压缩文件
var zlib = require('zlib');
//压缩input.txt文件为input.txt.gz
fs.createReadStream('output.txt').pipe(zlib.createGzip()).pipe(fs.createWriteStream('output.txt.gz'));

//解压:将压缩文件通过管道读入,经过gzip解压缩,再由管道写出为未压缩文件
//之所以隔2s执行是因为那是压缩了就解压可能没有压缩完,就在解压,是的output.txt.gz压缩文件压缩失败
setTimeout(function () {
    fs.createReadStream('output.txt.gz').pipe(zlib.createGunzip()).pipe(fs.createWriteStream('test.txt'));
},2000);
console.log("程序执行完毕");

猜你喜欢

转载自blog.csdn.net/weixin_41556165/article/details/81777745