当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Node.js readFile和createReadStream的区别用法及代码示例


在本文中,我们将讨论 Nodejs 中 readFile 和 createReadStream 的区别。两者都是允许我们打开文件/流并读取其中存在的数据的模块。

1. readFile:fs模块包含readFile方法。它用于通过将文件放入缓冲区来读取文件。它是一种异步方法,因此,它读取文件时不会阻塞代码的执行。首先,我们将 fs 模块引入我们的应用程序,然后使用其中的 readFile 方法。

用法:

fs.readFile( filename, encoding, callback_function)

参数:

  • filename:它保存必须读取的文件的路径。
  • encoding:它保存文件的编码。如果未指定选项,则返回原始缓冲区,默认值为‘utf8’。
  • callback_function: 它是一个在读取文件后调用的函数,包含两个参数 err 和 data。如果遇到任何错误,则会将其存储在 err 中,否则文件的内容将存储在 data 中。

返回值:它返回文件的内容。

例子:在这个例子中,我们使用readFile方法读取文件,要读取的文件是output.txt。

output.txt 文件:

This is an output file read from readFile method.

index.js


const fs = require('fs'); 
fs.readFile('output.txt', 'utf8', (err, data) => { 
  console.log(`Data present in the file is::    ${data}`); 
}); 
console.log('Outside readFile method'); 

输出:

Outside readFile method
Data present in the file is::   
This is an output file read from readFile method.

2. createReadStream:fs 模块包含内置 API(应用程序编程接口)createReadStream。它允许我们打开文件/流并读取其中存在的数据。

用法:

fs.createReadStream(path, options)

参数:

  • path:它保存必须读取的文件的路径。它可以是字符串、缓冲区的 URL。
  • options:它是一个可选参数。我们可以向它传递一个字符串或对象。
  • 返回值:它返回ReadObject Stream 的对象。

例子:在这个例子中,我们通过createReadStream.on方法读取文件名output.txt。

Output.txt 文件:

This is an output file read from createReadStream method.

index.js


const fs = require('fs'); 
const createReader = fs.createReadStream('output.txt'); 
  
createReader.on('data', (data) => { 
  console.log(data.toString()); 
}); 
  
console.log('Outside createReader.on method'); 

输出:

Outside createReader.on method
This is an output file read from createReadStream method.

readFile 和 createReadStream 的区别:

readFile

createReadStream

它在使文件可用之前将其读入内存

给用户。

它根据用户的需要分块读取文件。
由于读取整个文件,速度较慢。 由于其引入块的特性,它的速度更快。

如果请求太多,它不会扩展,因为它会尝试加载

他们都在同一时间。

它是可扩展的,因为它将内容直接传送到 HTTP

响应对象

由于它的特性,在这种情况下,nodejs 更容易处理内存清理。

在这种情况下,nodejs 的内存清理并不容易。


相关用法


注:本文由纯净天空筛选整理自namancourses大神的英文原创作品 Difference between readFile and createReadStream in Node.js。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。