node.js的fs模块的如何实现文件复制?

72 阅读1分钟

node.js的fs模块实现文件复制

  • 通过同步读和写实现
  • 通过流式读和写实现
  • 通过pipe实现
// 导入fs模块
const fs = require('fs');
//node.js的内置模块,可通过process.memoryUsage()方法获取代码运行时候占用的内存
const process = require('process');


//方法一:同步读、写的方法实现复制
const data = fs.readFileSync('./resource/用于文件流式读取.mp4');
fs.writeFileSync('./resource/用于文件流式读取copy1.mp4',data);
console.log(process.memoryUsage()) // rss:31092736字节,即29.65MB

//方法二:异步读、写的方法实现复制
const rs = fs.createReadStream('./resource/用于文件流式读取.mp4');
const ws = fs.createWriteStream('./resource/用于文件流式读取copy2.mp4');
rs.on('data',chunck=>{
  ws.write(chunck);
})
rs.on('end',()=>{
  console.log(process.memoryUsage())//rss:32919552字节,即31.4MB
})

//方法三:pipe
const ws1 = fs.createWriteStream('./resource/用于文件流式读取copy3.mp4');
rs.pipe(ws1);s

【特别注意】:频较大的情况下,流式读写复制占用内存是小于同步读写复制的。但是视频文件小的时候,可能会得出相反的答案,建议自己多拿几个不同大小的视频文件来测试。