管道流

可讀流可以管道或連線到可寫流。這使得資料從源流流向目標流而不需要太多努力。

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)