當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。