首页 > 解决方案 > fs.createReadStream vs Readable 用于重文件

问题描述

createReadStreamfromfsReadablefrom有什么区别吗stream

测试.csv

name,color
audi,green
bmw,red
mercedes,silver

fs.createReadStream

import { createReadStream } from 'fs'
import parser from 'csv-parser'

;(async () => {
  createReadStream('test.csv')
    .pipe(parser())
    .on('data', (data) => console.log(data))
})()

可读

import { readFile } from 'fs/promises'
import { Readable } from 'stream'
import parser from 'csv-parser'

;(async () => { 
 const csv = await readFile('test.csv')
 
 Readable.from(csv)
    .pipe(parser())
    .on('data', (data) => console.log(data))
})()

两者似乎都在做同样的事情。但是对于大量数据,哪一个更有效?

标签: javascriptnode.js

解决方案


fs.readFile/一次读取fsPromises.readFile文件的全部内容,而一次createReadStream只读取块。使用readFilewithReadable.from可能会提供相同的 API,但是通过将整个内容读取到内存中,您将失去流式传输的好处。

如果您正在读取大量文件,我建议您createReadStream结束readFile,因为您可以开始处理和解析数据而无需等待整个文件被读取,您甚至不需要将整个文件读入内存(除非您的用例需要它,即)。如果您的文件很小,则可能无关紧要(但请对其进行分析)。


推荐阅读