如何从节点中的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同步读取的主要内容,如果未能解决你的问题,请参考以下文章