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

问题描述 投票:1回答:1

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

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

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

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

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

node.js utf-8 synchronous
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.