如何从节点中的ReadStream同步读取

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从节点中的ReadStream同步读取相关的知识,希望对你有一定的参考价值。

我试图从内存中的文件和时间有效的方式读取UTF-8文本。有两种方法可以直接从文件中同步读取:

  • fs.readFileSync将读取整个文件并返回包含文件整个内容的缓冲区
  • fs.readSync将从文件中读取一定量的字节并返回仅包含这些内容的缓冲区

我最初只是使用fs.readFileSync,因为它最简单,但我希望能够通过一次只读取一块文本来有效地处理潜在的大文件。所以我开始使用fs.readSync代替。但后来我意识到fs.readSync不处理UTF-8解码。 UTF-8很简单,所以我可以用一些逻辑来手动解码它,但Node已经有了这个服务,所以我想尽可能避免这种情况。

我注意到fs.createReadStream,它返回一个可用于此目的的ReadStream,但不幸的是它似乎只能在异步操作模式下使用。

有没有办法以同步方式读取ReadStream?我已经建立了一个庞大的堆栈,我宁愿不必将它重构为异步。

答案

我发现了string_decoder模块,它处理我担心我必须编写的所有UTF-8解码逻辑。在这一点上,在fs.readSync上使用它来获得我正在寻找的同步行为似乎是明智之举。

你基本上只是继续向它提供字节,因为它能够成功解码字符,它会发出它们。 Node documentation足以描述它是如何工作的。

以上是关于如何从节点中的ReadStream同步读取的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Spark 中的多个云存储桶中读取 TXT 文件?

确定节点js中读取流的长度

破坏者模式 - 主节点和从节点如何保持同步?

如何在火花结构化流式读取流中倒带 Kafka 偏移

我可以在结束前关闭节点 readStream 吗?

使用ReadStream方法延时读取文件