node.js之stream流操作详细介绍——读出写入

《node.js之stream流操作详细介绍——读出写入》

文件的写入 读出 属于Stream(流)。有可读,可写,可读可写和操作被写入数据,然后读出结果四种操作。
从流中读取数据首先要创建文件,并且写入一些可见的内容。

一、读取流

例如:

// Node.js Stream(流)
// 从流中读取数据
function ReadStream(){
var fs = require("fs");
var data = "";
// 创建可读流
var stream = fs.createReadStream("input.txt");
stream.setEncoding("UTF8");
// 处理流事件 --> data, end, and error
stream.on("data",function(chunk){
data+=chunk;
});
stream.on("end",function(){
console.log(c+data);
});
stream.on("error",function(err){
console.log("error"+err)
});
};

二、写入流

创建一个可以写入的流 不能用已经有内容的文档,文档会被清空重新写入;建议使用output.txt,会自动创建新的文件。

// 写入流
function WriteStream(){
let fs = require("fs");
let data = "人生的智慧";
// 创建一个可以写入的流 不能用已经有内容的文档,文档会被清空重新写入;建议使用output.txt,会自动创建新的文件
let writeStream = fs.createWriteStream("output.txt");
writeStream.write(data, "UTF8");

writeStream.end();
writeStream.on("finish",function(){
console.log("写入完成。");
});
writeStream.on("error",function(err){
console.log(err);
});
};

三、通道流

通道流就是连个文件之间接通,其中一个文件的内容跑到另外一个文件中去。相当于,读取一个文件内容并将内容写入到另外一个文件中。

// 管道流
function Pipe(){
let fs = require("fs");
var readerStream = fs.createReadStream("input.txt");
var writeStream = fs.createWriteStream("output.txt");

readerStream.pipe(writeStream); // pipe 表示流的吸管 readerStream流到writeStream中
console.log("end");

// 这个时候两个txt文件的内容是一样的
};

四、链式流

链式流就是通过连接输出流到另外一个流并创建多个流操作链的机制。比如压缩文件,就是通过读取文件,然后把问价写入到一个包里面,再压缩这个包。解压也是同样的原理,读取压缩包里面的文件,通过解压包,再写入到一个文件中。

例如:

// 链式流
// 压缩过程
function compress(){
let fs = require("fs");
let zlib = require("zlib"); // 压缩包

fs.createReadStream("input.txt")
.pipe(zlib.createGzip()) // 创建压缩
.pipe(fs.createWriteStream("input.txt.gz")); // 输出压缩包

console.log("文件压缩完成");

}

// 解压过程
function decompress(){
let fs = require("fs");
let zlib = require("zlib"); // 压缩包

fs.createReadStream("input.txt.gz")
.pipe(zlib.createGunzip()) // 创建解压
.pipe(fs.createWriteStream("input1.txt")); // 输出一个新的解压后的文件
console.log("文件解压完成");
}
// ReadStream();
// WriteStream();
// Pipe();
// compress();
decompress();
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注