Javascript 如何通过管道将一个可读流传输到另一个可读流?

Javascript 如何通过管道将一个可读流传输到另一个可读流?,javascript,node.js,Javascript,Node.js,我正在做“流冒险”中的练习,我对流组合器模块非常不确定 具体来说,它说: 流组合器模块从流列表创建管道 流,返回将第一个流公开为 可写端和最后一个流作为可读端,如 双工器模块,但中间有任意数量的流。 与双工器模块不同,每个流通过管道传输到下一个流。对于 例如: var combine = require('stream-combiner'); var stream = combine(a, b, c, d); 将在内部执行a.pipe(b).pipe(c).pipe(d)但是流 由combin

我正在做“流冒险”中的练习,我对
流组合器
模块非常不确定

具体来说,它说:

流组合器
模块从流列表创建管道 流,返回将第一个流公开为 可写端和最后一个流作为可读端,如
双工器
模块,但中间有任意数量的流。 与双工器模块不同,每个流通过管道传输到下一个流。对于 例如:

var combine = require('stream-combiner');
var stream = combine(a, b, c, d);
将在内部执行
a.pipe(b).pipe(c).pipe(d)
但是
combine()
返回,其可写端连接到
a
及其 可读侧连接到
d

现在正如它所说,“它的可写端连接到
a
,可读端连接到
d
”,我们可以使用上面的
流,如下所示:

someReadableStream.pipe(stream).pipe(someWritableStream)
但上述情况难道不会变成:

someReadableStream.pipe(a).pipe(b).pipe(c).pipe(d).pipe(someWritableStream)

我的问题是,一个可读流如何通过管道传输到另一个可读流。最后,管道传输到可写流的结果如何再次管道传输到可写流。

下面是一个文本示例,希望能够澄清关于流的规则,以便流合并器执行有用的操作:

var rw = combine(r_or_rw, rw1, rw2, rw3, ...rwN, w_or_rw)

因此,第一个流至少需要可读,内部流都需要读/写,最后一个流至少需要可写。返回的新流是读/写的。当您写入返回的流时,它会通过管道向下发送新数据,当您读取时,它会从管道的末端向您提供数据。

您正确地认为它与可读的.pipe(a).pipe(b).pipe(c).pipe(d).pipe(可写)
相同, combiner的优点是不能从函数返回
a.pipe(b).pipe(c).pipe(d)
,因此必须始终手动连接它们。使用combiner,您可以从其他流中创建流,然后将其整理成函数或模块


不过,要使其工作,a、b、c、d都必须是可读可写的转换流。

请查看直通流。这可能是你所需要的。@MattHarrison我想你误解了我,我的疑问是为什么上面的方法有效?:)
a
d
必须是可读写的。所以我需要确保这一点吗?或者它是自动完成的。因为
流组合器
上的文档就像“它是否存在”一样,您需要写入流的可读内容,因此您的第二个流需要是可写的。我了解了组合的概念,但我不理解为什么您可以将数据写入流,由于新流的第一部分是可读流,因此如果
stream1
是只读的,您将无法写入返回流,但如果是读/写的,写入返回流将写入stream1并流经管道。根据最后一个流是只写流还是读/写流,结尾处的情况类似。我认为stream combiner API为您提供了一个r/w流以实现多功能性,但这取决于您知道哪些组合将起作用,哪些组合将不起作用。这很有意义!他们的文档真的很糟糕,请发送拉取请求!这是一个很小的模块。开源!