在我发现“setEncoding”方法之前,我一直在使用一段与此类似的代码。在重构代码时,我想到了这个问题。
readable.push(chunk, 'base64')
readable.push(null)
readable.pipe(res)
推送不就是一种写数据的形式吗?我不应该无法将任何数据写入可读流吗?我知道每个数据都需要在某个时候写入(否则它将为空)和读取(或者它变得无用),但我认为 Node 会从我们那里抽象出来。
有人可以帮我解决这个问题吗? 谢谢
最佳答案
当您从头开始创建新的可读流时,这会发挥作用。可读流需要从某个地方开始,并且需要有一种方法可以将数据放入新流中。当像您的问题一样执行 push()
时,您正在缓冲数据,直到它被读取,然后从流中刷新它,然后通过管道/读取到目的地以供使用。消费者将继续读取数据,直到命中“null”,这表明流已完成输出数据。
var stream = require('stream');
var readable = new stream.Readable(); // new empty stream.Readable
readable.push('some data');
readable.push(null); // Done writing data
要全面了解流在幕后如何工作以及各种类型的流,您应该阅读 Stream Handbook通过子堆栈。这应该可以回答您可能有的任何挥之不去的问题。
关于javascript - 为什么我可以插入可读流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38316821/