Node.js readFile和createReadStream的区别
在本文中,我们将讨论readFile和createReadStream在Nodejs中的区别。这两个模块都允许我们打开一个文件/流并读取其中的数据。
1. **readFile :** fs模块包含了readFile方法。它用于将文件读入缓冲区中。它是一个异步方法,由于这个原因,它在不阻止代码执行的情况下读取文件。首先,我们将fs模块引入我们的应用程序中,然后在其中使用readFile方法。
语法:
fs.readFile( filename, encoding, callback_function)
参数:
- filename: 它保存了要读取的文件的路径。
- encoding: 它保存了文件的编码。如果没有指定选项,则返回原始缓冲区, 默认值为‘utf8’。
- callback_function: 这是一个在读取文件后调用的函数,包含两个参数 err 和 data。如果遇到任何错误,则错误被存储在 err 中,否则文件的内容被存储在 data 中。
返回值: 它返回文件的内容。
示例: 在这个示例中,我们使用 readFile 方法读取文件,要读取的文件是 output.txt。
输出.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。
输出.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的内存清理不容易。 |