为什么我可以推入一个可读的stream?

我正在使用一段类似的代码,直到我发现了'setEncoding'方法。 在重构代码时,这个问题出现在我的面前。

readable.push(chunk, 'base64') readable.push(null) readable.pipe(res) 

是不是推一个写数据的forms? 我不应该无法将任何数据写入可读stream吗? 我知道每个数据都需要被写入(否则它将是空的),并且在某个时候被读取(或者变成无用的),但是我认为Node会从我们这里抽象出来。

有人可以帮我解决这个问题吗? 谢谢

当你从头开始创build一个新的可读stream时,这将起到作用。 可读stream需要从某处开始,并且需要有一种将数据导入新stream的方法。 当像你的问题那样做一个push() ,你需要缓冲数据,直到它被读取,然后从stream中刷新数据,然后通过pipe道/读入目的地进行消费。 消费者将继续读取数据,直到“空”命中,表明数据stream已经完成输出。

 var stream = require('stream'); var readable = new stream.Readable(); // new empty stream.Readable readable.push('some data'); readable.push(null); // Done writing data 

为了全面了解stream如何在引擎盖下以及各种types的stream下工作,您应该阅读Suback的Stream Handbook 。 这应该回答你可能有的任何徘徊的问题。