node.js 文件读取与复制相关内容的系统总结,包括 同步读取、异步读取、流式读取、复制操作、两者对比及内存测试。
一、node.js 文件读取方式总结
node.js 使用 fs(文件系统)模块进行文件操作:
1.同步读取(blocking)
const fs = require('fs'); const data = fs.readfilesync('file.txt', 'utf-8'); console.log(data);
✅ 优点:逻辑简单,适合初始化配置、命令行工具等无需并发场景。
❌缺点:阻塞线程,读取大文件会卡住整个应用。
当然可以!下面是一个使用 node.js 同步方式进行文件复制的完整例子,先同步读取文件内容,再同步写入到目标文件。
示例:使用 fs.readfilesync + fs.writefilesync 实现文件复制
const fs = require('fs'); try { // 同步读取源文件内容 const data = fs.readfilesync('source.txt', 'utf-8'); // 同步写入到目标文件 fs.writefilesync('target.txt', data); console.log('文件复制成功 ✅'); } catch (err) { console.error('复制失败 ❌', err); }
说明:
- fs.readfilesync(path, encoding):阻塞方式读取文件内容
- fs.writefilesync(path, data):阻塞方式将内容写入文件
- 适合小型文本文件复制(例如:配置文件、日志等)
注意:
会阻塞事件循环,若文件大或复制频繁,不适合用在服务端生产环境。
大文件建议使用流式复制方式。
2. 异步读取(non-blocking)
const fs = require('fs'); fs.readfile('file.txt', 'utf-8', (err, data) => { if (err) throw err; console.log(data); });
- ✅ 优点:非阻塞、适合高并发,不会卡住主线程。
- ❌缺点:逻辑较复杂,需使用回调、promise 或 async/await。
3. 流式读取(stream)
const fs = require('fs'); const readstream = fs.createreadstream('file.txt', 'utf-8'); readstream.on('data', chunk => { console.log('读取块:', chunk); }); readstream.on('end', () => { console.log('读取完成'); });
- ✅ 优点:适合读取大文件、低内存消耗
- ❌缺点:实现复杂,处理逻辑需分块处理。
二、读取场景对比
方式 | 适合场景 | 特点 |
---|---|---|
同步读取 | 小文件、本地 cli 工具等 | 简单,阻塞线程 |
异步读取 | web 服务、文件上传 | 非阻塞,高性能 |
流式读取 | 视频、大型日志、备份等 | 节省内存,分块 |
三、node.js 文件复制方式
1. 同步复制
const fs = require('fs'); fs.copyfilesync('source.txt', 'target.txt');
✅ 简单,适合少量小文件。
❌阻塞线程,大量并发时不可用。
2. 流式复制(推荐)
const fs = require('fs'); const readstream = fs.createreadstream('source.txt'); const writestream = fs.createwritestream('target.txt'); readstream.pipe(writestream);
✅ 非阻塞,适合大文件。
✅ 边读边写,内存占用低。
❌ 无法轻松控制复制进度或中断。
四、复制方式对比
方法 | 内存占用 | 性能 | 使用场景 |
---|---|---|---|
同步复制 | 高 | 低 | 小型项目、工具类 |
流式复制 | 低 | 高 | 服务端、大文件 |
五、内存占用测试示例
可以通过 process.memoryusage() 查看 node.js 内存使用:
console.log(process.memoryusage());
示例:对比读取一个 500mb 文件时的内存变化:
// 流式读取内存较低 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);
总结重点
功能 | 同步 | 异步 | 流式 |
---|---|---|---|
阻塞 | ✅ 是 | ❌ 否 | ❌ 否 |
内存消耗 | ❌ 高 | ⚠️ 中 | ✅ 低 |
实现复杂度 | ✅ 简单 | ⚠️ 中等 | ❌ 高 |
适合场景 | 启动、工具 | web 服务 | 大文件处理 |
到此这篇关于node.js进行文件读取与复制的系统总结的文章就介绍到这了,更多相关node.js文件读取与复制内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论