javascript - 为什么我可以插入可读流?

标签 javascript node.js stream

在我发现“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/

相关文章:

node.js - 如何动态更改 Mongoose 提供程序中集合或数据库的名称,Nestjs?

node.js - 使用接受转发端口的 NodeJs 的 SSH 服务器

mysql - 带计时器和错误处理的 Node.js MySQL 连接

java - 写入 Java 进程的 InputStream

c# - 文件流读/写

javascript - 在 JavaScript 中查找 Angular

javascript - 在 iMacros javascript 中选择数据源文件

c# - 如何解析多部分 HttpWebResponse

javascript - 悬停时垂直对齐的扩展菜单项和出现的子菜单

javascript - 我正在尝试创建一个带有框架的 JSP 页面