首页 > stream.pipe 怎么理解?

stream.pipe 怎么理解?

下面这两个意义一样嘛?

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

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

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

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

那两者的含义这样吗?


请参考这个 https://github.com/substack/stream-handbook#pipe


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数据流即是个可写入流同时也是个可读取流

【热门文章】
【热门文章】