Node.js 支持 Stream 流文件处理,那么什么是流?
将一个大文件,拆分为一小块一小块的二进制小文件,这些小文件被称为 chunk,这些所有的 chunk 组成了流。当我们处理这类大文件时,这些 chunk 像水流一样一点点的流出去等待被处理。
流分两类,可读流和可写流。顾名思义,可读流就是可以读取每个 chunk 的流,可写流是将读取的 chunk 写入到这个流中,组成一个新流。
可读流/可写流通常基于文件创建,举个例子:
var fs = require('fs');var data = '';// 创建可读流var readerStream = fs.createReadStream('input.txt');// 设置编码为 utf8。readerStream.setEncoding('UTF8');// 处理流事件 --> data, end, and errorreaderStream.on('data', function (chunk) {data += chunk;});readerStream.on('end', function () {console.log(data);});readerStream.on('error', function (err) {console.log(err.stack);});console.log('程序执行完毕');
管道流像一条水管一样,从一个桶(readStream)中流出数据,通过管道,流入到另一个桶(writeStream)。这样就慢慢的实现了大文件的复制过程。
var fs = require('fs');// 创建一个可读流var readerStream = fs.createReadStream('input.txt');// 创建一个可写流var writerStream = fs.createWriteStream('output.txt');// 管道读写操作// 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中readerStream.pipe(writerStream);console.log('程序执行完毕');