管道流

可读流可以管道或连接到可写流。这使得数据从源流流向目标流而不需要太多努力。

var fs = require('fs')

var readable = fs.createReadStream('file1.txt')
var writable = fs.createWriteStream('file2.txt')

readable.pipe(writable) // returns writable

当可写流也是可读流时,即当它们是双工流时,你可以继续将其传输到其他可写流。

var zlib = require('zlib')

fs.createReadStream('style.css')
  .pipe(zlib.createGzip()) // The returned object, zlib.Gzip, is a duplex stream.
  .pipe(fs.createWriteStream('style.css.gz')

可读流也可以通过管道传输到多个流中。

var readable = fs.createReadStream('source.css')
readable.pipe(zlib.createGzip()).pipe(fs.createWriteStream('output.css.gz'))
readable.pipe(fs.createWriteStream('output.css')

请注意,必须在任何数据流动之前同步(同时)管道输出流。如果不这样做,可能会导致数据流不完整。

另请注意,流对象可以发出 error 事件; 请务必根据需要在每个流上负责任地处理这些事件 :

var readable = fs.createReadStream('file3.txt')
var writable = fs.createWriteStream('file4.txt')
readable.pipe(writable)
readable.on('error', console.error)
writable.on('error', console.error)