37.Buffer缓冲器与fs文件系统

本文介绍了Node.js中的Buffer对象用于处理二进制数据的特点和使用方法,包括创建、转换以及大小固定的特性。同时详细讲解了fs模块对文件系统的操作,如同步和异步文件写入,流式文件读写,以及如何在Express基础学习之前理解这些核心概念。
摘要由CSDN通过智能技术生成

上一章:包与包管理器

第4章:Buffer缓冲器

4.1 Buffer是什么

Buffer是一个和数组类似的对象,不同是Buffer是专门用来保存二进制数据的。

4.2 Buffer特点

  1. 大小固定:在创建时就确定了,且无法调整
  2. 性能较好:直接对计算机的内存进行操作
  3. 每个元素大小为1字节(byte)

4.3 Buffer的使用

4.3.1创建Buffer

// 创建一个指定size大小的Buffer
var buf = Buffer.alloc(size);  //安全,里面全是0
var buf = Buffer.allocUnsafe(size);   //不安全,可能包含旧数据,需要重写所有数据
//  获取Buffer的长度
buf.length

4.3.2 转换

// 相当于Buffer.alloc(size);
var buf = Buffer.allocUnsafe(size);
buf.fill(0)   //将可能出现的敏感数据用0全部填充

// 将一个字符串转换为Buffer
var buf = Buffer.from(str);

// 将一个Buffer转换为字符串
var str = buf.toString();  

第5章:fs文件系统

5.1 fs是什么

全称为file system,所谓的文件系统,就是对计算机中的文件进行增删改查等操作。它是一个服务器的基础,在Node中通过fs模块来操作文件系统。

5.2 fs的使用

  1. fs模块是Node的核心模块,不需要下载,直接引入即可使用

    // 引入fs模块
    var fs = require("fs");
    
  2. fs中的大部分方法都为我们提供了两个版本:

    • 同步方法:带sync的方法
      • 同步方法会阻塞程序的执行
      • 同步方法通过返回值返回结果
    • 异步方法:不带sync的方法
      • 异步方法不会阻塞程序的执行
      • 异步方法都是通过回调函数来返回结果的

5.3文件的写入

5.3.1简单写入

同步方法:fs.writeFileSync(file, data[, options])
异步方法:fs.writeFile(file, data[, options], callback)
参数:
file 要写入的文件的路径
data 要写入的内容,可以是一个String也可以是一个Buffer
options 配置对象,需要一个对象作为参数,默认如下:
			{encoding:"utf8",flag:"w",mode:0666}
		callback 回调函数

5.3.2流式写入

流式文件写入适用于一些比较大的文件,可以分多次向文件中写入内容,有效避免内存溢出的问题

1.创建一个可写流
  var ws = fs.createWriteStream(path);
2.监听流的状态
  ws.on("open",function(){});
  ws.on("close",function(){});
3.向流中写入内容
  ws.write(...);
  ws.write(...);
  ws.write(...);
4.关闭流
  ws.end();

5.4文件的读取

5.4.1 简单读取文件

fs.readFileSync(path[, options])
fs.readFile(path[, options], callback)
参数:
path 读取文件的路径
	 	options 配置对象
 		encoding 指定打开文件的编码,默认是null
 		flag 文件的操作类型,默认是 r
callback 回调函数,通过回调函数返回读取到的数据
 		    err 错误对象
 			data 返回的数据(Buffer)

5.4.2 流式读取文件

适合较大的文件

// 方式一:
//创建一个可读流
var rs = fs.createReadStream("C:\\other\\MP3\\笔记.mp3");
//创建一个可写流
var ws = fs.createWriteStream("biji.mp3");

//监听可读流,可读流读取完毕后会自动关闭
rs.on("open" , function () {
  console.log("流打开了");
});
rs.on("close" , function () {
  console.log("流关闭了");
//数据读取完毕,可以关闭可写流
  ws.end();
});

//监听可写流
ws.on("open" , function () {
  console.log("可写流打开了");
});
ws.on("close" , function () {
  console.log("可写流关闭了");
});
//要通过可读流读取一个文件,必须为流绑定一个data事件,当绑定了data事件以后,流会自动读取
rs.on("data",function (data) {
//console.log(data);
//将数据写入到可写流中
  ws.write(data);
});
//方式二:
//创建一个可读流
var rs = fs.createReadStream("C:\\other\\MP3\\笔记.mp3");
//创建一个可写流
var ws = fs.createWriteStream("biji.mp3");
/*
 pipe()
  - 可以将一个可读流中的内容写入到一个可写流中
 */
rs.pipe(ws);

下一章:Express基础学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值