【问题标题】:Any benefit to using streams if all the data fits in a single chunk?如果所有数据都放在一个块中,使用流有什么好处?
【发布时间】:2014-02-17 13:41:41
【问题描述】:

当我在 Node.js 中执行 fs.createReadStream 时,数据似乎以 64KB 块的形式出现(我假设这在计算机之间有所不同)。

假设我通过一系列转换(每个转换对单个块进行操作)传输读取流,然后最终将其传输到写入流以将其保存到磁盘...

如果我事先知道我正在处理的文件每个都保证小于 64KB(即,它们每个都将在一个块中读取),那么使用流有什么好处,而不是普通的旧异步代码?

【问题讨论】:

    标签: node.js stream


    【解决方案1】:

    首先,您可以使用the highWaterMark parameter 配置块大小:字节模式流默认为16k(对象模式流为16 个对象),但fs.ReadStream 默认为64k 块(参见relevant source code )。

    如果您绝对确定您的所有数据都适合一个块,那么使用流确实没有直接的好处。

    但请记住,流是灵活的;它们是代码的统一抽象:您可以从文件、套接字或随机生成器中读取数据。您可以在流管道中添加或删除双工流,您的代码仍将以相同的方式工作。

    您还可以将单个可读流通过管道传输到多个可写流中,但仅使用异步回调会很痛苦……

    另请注意,流不会同步发出数据(即,readable 事件在下一个滴答时发出),它可以很好地为您处理同步调用异步回调的常见错误,从而产生可能的堆栈溢出错误.

    【讨论】:

    • 另外一点是,虽然您的块是 16k、64k 或其他大小,但流的接收者可能更小 - 对他们来说,无论如何流式传输都是有益的。
    猜你喜欢
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多