stream.pipe 怎么理解?

下面这两个意义一样嘛?

stream.pipe(...)
stream.pipe(...)

stream.pipe(...).pipe(...)

stream.pipe(...) 跟 stream 本身是不是同一个东西?

但Object.is(stream,stream.pipe(...)) 的时候返回的是 false

那两者的含义这样吗?

图片描述

图片描述

阅读 8k
2 个回答
readable.pipe(destination[, options])

一个readable的流才会有pipe方法可以调用,pipe方法接收一个可写入的流对象作为pipe的目标
就是在一个可读的流和可写的流之间建立一个通道,把readable中的数据写入destination中,pipe执行完后返回destination指定的流对象

stream.pipe(...) 返回跟 stream 就不是同一个对象

stream.pipe(destinationA)
stream.pipe(destinationB)

同一个stream通过pipe写入到指定的可写流destinationA/destinationB中

stream.pipe(destinationA).pipe(destinationB)

stream流写入destinationA,如果stream.pipe(destinationA)返回的流同时是可读的,那么可以链式调用pipe方法将流写入destinationB
pipe方法能够链式调用的一个前提是pipe返回的流是可读的

例如

var r = fs.createReadStream('file.txt');
var z = zlib.createGzip();
var w = fs.createWriteStream('file.txt.gz');
r.pipe(z).pipe(w);

zlib数据流即是个可写入流同时也是个可读取流

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题