大文件不再“卡死”你的程序——createReadStream 和 readFile 的区别

大文件不再“卡死”你的程序——createReadStream 和 readFile 的区别

作为 Node.js 开发者,我们经常需要读取文件并操作文件内容。在 Node.js 中,有两种常用的方法来读取文件:createReadStream 和 readFile。

readFile

readFile 是 Node.js 中的一个 BIF (Built-in Function),用于从文件中异步读取数据。它的基本语法如下:

fs.readFile(path[, options], callback)

其中,path 表示要读取的文件路径,options 用于指定读取时的一些选项,callback 是读取完成后的回调函数。

示例代码:

const fs = require('fs')

fs.readFile('example.txt', 'utf8', (err, data) => {
  if (err) throw err
  console.log(data)
})

这段代码通过 readFile 方法读取 example.txt 文件,并以 UTF-8 编码方式将文件内容输出到控制台。

readFile 的优点是简单易用,可以快速地读取文件内容。但是,如果读取的文件非常大,就会出现阻塞线程的情况,导致程序变慢甚至崩溃。因此,在读取大文件时,我们应该使用另一种方法:createReadStream

createReadStream

createReadStream 是 Node.js 中的另一个 BIF,用于从文件中创建一个可读流。它的基本语法如下:

fs.createReadStream(path[, options])

其中,path 表示要读取的文件路径,options 用于指定读取时的一些选项。

示例代码:

const fs = require('fs')

const stream = fs.createReadStream('example.txt', 'utf8')

stream.on('data', (chunk) => {
  console.log(chunk)
})

stream.on('end', () => {
  console.log('done')
})

这段代码通过 createReadStream 方法创建了一个可读流,并将文件内容逐块输出到控制台。当所有数据都被读取完毕时,会触发 end 事件,表示读取完成。

createReadStream 的优点是可以异步地读取大文件,并且不会阻塞线程。它可以在读取文件的同时进行其他操作,从而提高程序的性能。

总结

readFilecreateReadStream 都是用于读取文件的方法,但在读取大文件时,应该使用 createReadStream,以保证程序的性能和稳定性。此外,我们还可以使用 pipe 方法将可读流和可写流连接起来,实现更加复杂的业务逻辑。

希望本篇文章对你有所帮助,如果有疑问或建议,欢迎留言交流!

更多题目

juejin.cn/column/7201…

原文链接:https://juejin.cn/post/7221820151397646373 作者:𝑺𝒉𝒊𝒉𝑯𝒔𝒊𝒏𝒈

(0)
上一篇 2023年4月15日 上午10:05
下一篇 2023年4月15日 上午10:15

相关推荐

发表回复

登录后才能评论