如何从节点

时间:2017-12-26 19:43:05

标签: node.js utf-8 synchronous

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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