3.nodejs下buffer及fs文件操作

1、buffer缓冲器

1.1、buffer概念

在nodejs中的buffer是一个类似数组的对象,不同的是buffer是一个专门用来存储二进制数据。

【Buffer特点】

(1)大小固定,在创建的时候确定了,且无法调整。

(2)性能较好,直接对计算机的内存进行操作。

(3)每个元素大小为1字节btye

(4)Buffer是Node中非常核心的模块,无需下载,无需引入,直接就可以使用。

1.2、创建buffer三种方式

1、new Buffer()方式创建

//创建一个buffer的实例对象
let buf = new Buffer(10);//这种方式性能非常差。
console.log(buf);

运行上面代码会有这个提示:不推荐使用new Buffer()方式

DeprecationWarning: Buffer() is deprecated due to security and usability issues.Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.

2、Buffer.alloc方式创建推荐使用这种方式

//Buffer.alloc()方式创建Buffer实例对象比new Buffer()稍微强
let buf2 = Buffer.alloc(10);//alloc是在堆中开辟一块空间,但是这块空间没有被用过
//<Buffer 00 00 00 00 00 00 00 00 00 00>
console.log(buf2);

3、Buffer.alloUnsafe方式创建

//Buffer.allocUnsafe()创建Buffer实例对象;该方式性能最强
//allocUnsafe输出的buffer是16进制
let buf3 = Buffer.allocUnsafe(10);
console.log(buf3);

1.3、Buffer.from方法

Buffer.from方法是将数据存放到buffer实例中

// 将数据存入一个Buffer实例
let buf4 = Buffer.from('中国 郑州');
//再次输出内容不变
console.log(buf4);
// 如果是字符串可以toString()直接输出,如果是音频图片就无法输出
console.log(buf4.toString());

2、fs文件操作

Node中的文件系统:https://nodejs.org/dist/latest-v14.x/docs/api/fs.html

(1)在NodeJs中有一个文件系统,所谓的文件系统,就是针对计算机中的文件进行增删改查等操作。

(2)在NodeJs中,给我们提供了一个模块,叫做fs模块(文件系统),专门用于操作文件。

(3)fs模块是Node的核心模块,使用的时候无需下载直接引入就行。

2.1、异步写入writeFile

参数说明:

(1)file表示要写入的文件路径+文件名;

(2)data:要写入的数据

(3)options表示配置对象,可选参数。

  ①encoding:设置文件的编码方式,默认值utf8

  ②mode:设置文件的操作权限,默认值是0o 666(八进制值);其他值0o111文件可被执行的权限,0o222文件可被写入的权限、0o444文件可被读取的权限。

  ③flag:打开文件要执行的操作,默认值是’w’,其a表示追加,w表示写入。

(4)callback表示回调函数。callback里面的err表示错误对象。

//引入内置fs模块
let fs = require('fs');
//调用writeFile
fs.writeFile('./demo.txt','今天天气真好!',(err)=>{
  if (err){
    console.log("文件写入失败",err);
  }else {
    console.log('文件写入成功');
  }
});

注意:fs.writeFile()在不等待回调的情况下对同一文件多次使用是不安全的。对于这种情况,fs.createWriteStream()建议使用

2.2、流式写入文件createWriteStream

 

【参数说明】(1)path:表示要写入文件路径+文件名+文件扩展名

(2)options配置对象,可选配置

①flags②encoding

fd表示文件统一标识符,linux下文件标识符

④mode

autoClose自动关闭文件,默认值为true

emitColse关闭文件,默认值false

⑦start:读取文件的起始位置,也就是偏离量

//引入内置fs模块
let fs = require('fs');
//创建一个可写流
let ws = fs.createWriteStream(__dirname+"/1.txt");
//只要用到了流,就必须检测流的状态
wf.on('open',function () {
  console.log('可写流打开');
});
//使用可写流 写入数据
ws.write('帅哥');
ws.on('close',function () {
  console.log('可写流关闭');
});
//如果在Node8中关闭流会导致数据丢失
// ws.close();
ws.end();//推荐用这种方式,node8中必须用end关闭流

 

2.3、异步文件读取

【参数说明】

(1)path:要读取文件的路径+名称+扩展名称

(2)options:配置对象,可选

①encoding编码方式②flag

(3)callback:回调

①err错误对象②data:读取出来的数据

//引入内置fs模块
let fs = require('fs');
fs.readFile(__dirname+"/demo.txt",function (err, data) {
  if (err){
    console.log("读取错误",err);
  }else{
    //这里是txt文件可以toString(),如果是mp3 mp4直接data是buffer
    console.log(data.toString());
  }
});

 

2.4、流式文件读取createReadStream

【参数说明】

(1)path:表示要读取文件路径含文件名称

(2)options表示可配置对象,可选项;

①flags②encoding③fd④mode⑤autoClose⑥emitColse⑦start

⑧end结束位置,也就是结束偏移量

highWaterMark:表示每次读取数据大小,默认值64*1024=65534;

let {createReadStream} = require('fs');
//创建一个可读流
let rs = createReadStream(__dirname+"/demo.txt");
//只要用到流,就必须检测流的状态
rs.on('open',function () {
  console.log('可读流打开');
});
rs.on('close',function () {
  console.log('可读流关闭');
});
// 给可读流绑定一个data事件,就会触发可读流自动读取内容
// let result = rs.on('data');//这个表示一次性全部读取进去
rs.on('data',function (data) {
// data是buffer一个伪数组,data.length值为65536,表示该buffer实例占用内存空间的大小
  // 65536/1024 = 64字节,也就是每次读取64字节
  console.log(data.length);
console.log(data);
});

读取一个文件后写入到另外一个文件中

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值