Node.js進行文件讀取與復(fù)制的系統(tǒng)總結(jié)
Node.js 文件讀取與復(fù)制相關(guān)內(nèi)容的系統(tǒng)總結(jié),包括 同步讀取、異步讀取、流式讀取、復(fù)制操作、兩者對比及內(nèi)存測試。
一、Node.js 文件讀取方式總結(jié)
Node.js 使用 fs(文件系統(tǒng))模塊進行文件操作:
1.同步讀?。˙locking)
const fs = require('fs');
const data = fs.readFileSync('file.txt', 'utf-8');
console.log(data);
? 優(yōu)點:邏輯簡單,適合初始化配置、命令行工具等無需并發(fā)場景。
?缺點:阻塞線程,讀取大文件會卡住整個應(yīng)用。
當(dāng)然可以!下面是一個使用 Node.js 同步方式進行文件復(fù)制的完整例子,先同步讀取文件內(nèi)容,再同步寫入到目標(biāo)文件。
示例:使用 fs.readFileSync + fs.writeFileSync 實現(xiàn)文件復(fù)制
const fs = require('fs');
try {
// 同步讀取源文件內(nèi)容
const data = fs.readFileSync('source.txt', 'utf-8');
// 同步寫入到目標(biāo)文件
fs.writeFileSync('target.txt', data);
console.log('文件復(fù)制成功 ?');
} catch (err) {
console.error('復(fù)制失敗 ?', err);
}
說明:
- fs.readFileSync(path, encoding):阻塞方式讀取文件內(nèi)容
- fs.writeFileSync(path, data):阻塞方式將內(nèi)容寫入文件
- 適合小型文本文件復(fù)制(例如:配置文件、日志等)
注意:
會阻塞事件循環(huán),若文件大或復(fù)制頻繁,不適合用在服務(wù)端生產(chǎn)環(huán)境。
大文件建議使用流式復(fù)制方式。
2. 異步讀?。∟on-blocking)
const fs = require('fs');
fs.readFile('file.txt', 'utf-8', (err, data) => {
if (err) throw err;
console.log(data);
});
- ? 優(yōu)點:非阻塞、適合高并發(fā),不會卡住主線程。
- ?缺點:邏輯較復(fù)雜,需使用回調(diào)、Promise 或 async/await。
3. 流式讀?。⊿tream)
const fs = require('fs');
const readStream = fs.createReadStream('file.txt', 'utf-8');
readStream.on('data', chunk => {
console.log('讀取塊:', chunk);
});
readStream.on('end', () => {
console.log('讀取完成');
});
- ? 優(yōu)點:適合讀取大文件、低內(nèi)存消耗
- ?缺點:實現(xiàn)復(fù)雜,處理邏輯需分塊處理。
二、讀取場景對比
| 方式 | 適合場景 | 特點 |
|---|---|---|
| 同步讀取 | 小文件、本地 CLI 工具等 | 簡單,阻塞線程 |
| 異步讀取 | Web 服務(wù)、文件上傳 | 非阻塞,高性能 |
| 流式讀取 | 視頻、大型日志、備份等 | 節(jié)省內(nèi)存,分塊 |
三、Node.js 文件復(fù)制方式
1. 同步復(fù)制
const fs = require('fs');
fs.copyFileSync('source.txt', 'target.txt');
? 簡單,適合少量小文件。
?阻塞線程,大量并發(fā)時不可用。
2. 流式復(fù)制(推薦)
const fs = require('fs');
const readStream = fs.createReadStream('source.txt');
const writeStream = fs.createWriteStream('target.txt');
readStream.pipe(writeStream);
? 非阻塞,適合大文件。
? 邊讀邊寫,內(nèi)存占用低。
? 無法輕松控制復(fù)制進度或中斷。
四、復(fù)制方式對比
| 方法 | 內(nèi)存占用 | 性能 | 使用場景 |
|---|---|---|---|
| 同步復(fù)制 | 高 | 低 | 小型項目、工具類 |
| 流式復(fù)制 | 低 | 高 | 服務(wù)端、大文件 |
五、內(nèi)存占用測試示例
可以通過 process.memoryUsage() 查看 Node.js 內(nèi)存使用:
console.log(process.memoryUsage());
示例:對比讀取一個 500MB 文件時的內(nèi)存變化:
// 流式讀取內(nèi)存較低
const stream = fs.createReadStream('bigfile.txt');
stream.on('data', chunk => {
console.log(process.memoryUsage().heapUsed);
});
// readFileSync 讀取整個文件占用大
const content = fs.readFileSync('bigfile.txt');
console.log(process.memoryUsage().heapUsed);
總結(jié)重點
| 功能 | 同步 | 異步 | 流式 |
|---|---|---|---|
| 阻塞 | ? 是 | ? 否 | ? 否 |
| 內(nèi)存消耗 | ? 高 | ?? 中 | ? 低 |
| 實現(xiàn)復(fù)雜度 | ? 簡單 | ?? 中等 | ? 高 |
| 適合場景 | 啟動、工具 | Web 服務(wù) | 大文件處理 |
到此這篇關(guān)于Node.js進行文件讀取與復(fù)制的系統(tǒng)總結(jié)的文章就介紹到這了,更多相關(guān)Node.js文件讀取與復(fù)制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
node+axios實現(xiàn)下載外網(wǎng)文件到本地
這篇文章主要為大家介紹了node+axios實現(xiàn)下載外網(wǎng)文件到本地示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06
關(guān)于Node.js中頻繁修改代碼重啟服務(wù)器的問題
這篇文章主要介紹了關(guān)于Node.js中頻繁修改代碼重啟服務(wù)器的問題,本文給大家分享解決辦法,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10
node pnpm修改默認(rèn)包的存儲路徑(操作方法)
PNPM是一個新的包管理工具,也是NPM的另一個替代方案,與NPM不同,PNPM使用符號鏈接(symlink)而不是復(fù)制文件來安裝包,這篇文章主要介紹了node pnpm修改默認(rèn)包的存儲路徑,需要的朋友可以參考下2024-05-05
手把手教你用Node.js爬蟲爬取網(wǎng)站數(shù)據(jù)的方法
這篇文章主要介紹了手把手教你用Node.js爬蟲爬取網(wǎng)站數(shù)據(jù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07

