【问题标题】:What does the _read function for readable streams do in nodejs?nodejs中可读流的_read函数有什么作用?
【发布时间】:2014-10-16 11:24:54
【问题描述】:

我正在阅读文档并且有此描述,但我不明白它的含义。

所有可读流实现都必须提供一个 _read 方法来从底层资源中获取数据。

此方法带有下划线前缀,因为它在定义它的类内部,不应由用户程序直接调用。但是,您应该在自己的扩展类中覆盖此方法。

当数据可用时,通过调用 readable.push(chunk) 将其放入读取队列。如果 push 返回 false,那么您应该停止阅读。当 _read 再次被调用时,您应该开始推送更多数据。

什么是底层资源? 您何时会真正指定 _read 函数,这意味着它的用途是什么?

【问题讨论】:

    标签: node.js stream


    【解决方案1】:

    _read() 函数用于通知可读流尚未到达highWaterMark,并且流可以随意从底层资源读取更多数据。传递给 _read() 的参数是从底层资源读取的字节数(或 objectMode 的项目数)的建议。

    文档中提到的底层资源是指任何数据源。它可以是任何东西,包括另一个可读流,也可以是您动态生成的数据(例如,提供随机二进制数据的可读流)。

    【讨论】:

    • 谢谢!我会投票赞成答案,但我没有代表这样做。 _read 有没有你能想到的实际应用(除了留空)?
    • 这总是实用的,因为通过在缓冲区未满时推送更多数据,您可以确保下游始终有数据要接收并且不会等待数据。
    • 那么你会在_read函数里面放什么?我知道大小是参数,但是函数内部的代码会是什么样子?
    • 如前所述,这取决于您的数据源。您必须为可读流提供来自 somewhere 的数据,无论是来自另一个流还是您自己生成(例如随机数据示例)。在_read() 内部,您可以将数据从某处push() 提取到您的可读流中。
    • 这就是_read() 回调。这是为了表示应该从上游源读取更多数据。如果您 push() 并且它返回 false,则停止从上游读取,直到下一次调用 _read()。您不必必须_read() 中使用push(),因为_read() 只是一个信号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 2014-05-14
    • 2011-07-20
    相关资源
    最近更新 更多