流Stream
类比与java的流,有输入流 ReadStream,输出流 WriteStream.
流的出现是因为担心文件太大,通过流可以一点一点加载数据。
输入流
读取文件的流,可以看成插入一个管子,然后在读取文件通过管子读取。
如:
const fs = require("fs");
const readStream = fs.createReadStream(`test`);
readStream.on("data",chunk=>{
console.log(chunk.toString());
});
readStream.on('end',()=>{
console.log(`读取完毕`);
});
readStream.on('error',error=>{
console.log(error);
});
/*
3232323232
读取完毕
*/
readStream就是获取的流,然后可以对增加监听事件,data事件,读取过程,chunk表示读取的数据。
输出流
写入文件流,类比输入流。
例子:
const fs = require(`fs`);
const writeStream = fs.createWriteStream('write-file');
writeStream.write('xxxx');
writeStream.end();
writeStream.on("data",chunk=>{
console.log(chunk.toString());
});
writeStream.on("end",()=>{
console.log(`写入完毕!`);
});
writeStream.on("error",error=>{
console.log(error);
});
pipe
就像可以把两个水管串成一个更长的水管一样,两个流也可以串起来。一个Readable流和一个Writable流串起来后,所有的数据自动从Readable流进入Writable流,这种操作叫pipe。
在Node.js中,Readable流有一个pipe()方法,就是用来干这件事的。
复制文件
利用pipe,我们可以复制文件,如:
const fs = require("fs");
const readStream = fs.createReadStream("test");
const writeStream = fs.createWriteStream("copied");
readStream.pipe(writeStream);
这样就可以把 test文件复制到copied文件,可以想象成,输入流的数据通过管道流向输出流,写入文件。