【问题标题】:Node.js - Read a stream once a value has been found, then closeNode.js - 找到值后读取流,然后关闭
【发布时间】:2018-10-26 16:43:02
【问题描述】:

所以我想通过一个非常大的文件中的流来捕获一些数据。但我不想将所有这些数据捕获到内存中。所以我想做的是打开一个流,等到我找到一个匹配项,比如说开一个班级ClassName {。然后在找到结尾} 后关闭流并停止阅读。然后返回所有已捕获的数据。

我正在考虑为此使用转换器,但我不知道如何等到找到某个字符串。我可以将当​​前找到的数据放入内存并继续检查它是否匹配?但这似乎不太正确,我认为可能还有另一种我无法在规范中找到的解决方案。我很高兴编写代码,如果有人能指出我正确的方向,那就太好了。

【问题讨论】:

  • 括号可以嵌套,哪一个是正确的?
  • 我打算做第一个没有转义的括号。因为在我使用它的情况下,我不会有嵌套的括号。该类只是获取流点的示例

标签: javascript node.js regex stream


【解决方案1】:

我认为您可以创建一个返回承诺的函数。然后,我可能会使用Readline interface 逐行获取文件,扫描每一行以查找我要查找的内容的开头和结尾。当您收到所需内容的结尾时,您可以在文件上调用.close(),然后使用您收集的结果来解决承诺。

【讨论】:

  • 似乎是一个很好的解决方案。只是想知道一旦找到“开口”,是否有可能切换到逐个字符读取。
  • @mountaindrew - 您可以逐个字符读取(只需查看 fs 模块中的所有文件读取方法),但如果您异步执行此操作,则可能要复杂得多我所建议的。一旦你有了一行,你就可以逐个字符地扫描它来寻找你想要的任何东西。
  • @mountaindrew - 您通常不会将流与其他类型的读取混合使用,因此如果您按照我的建议使用逐行流,则不会切换到一次读取一个字节时间在中间。只取下一行并一次处理一行中的字符要容易得多。
猜你喜欢
  • 1970-01-01
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-13
  • 2018-11-21
  • 1970-01-01
  • 2016-02-12
相关资源
最近更新 更多