上一章:包与包管理器
目录
第4章:Buffer缓冲器
4.1 Buffer是什么
Buffer是一个和数组类似的对象,不同是Buffer是专门用来保存二进制数据的。
4.2 Buffer特点
- 大小固定:在创建时就确定了,且无法调整
- 性能较好:直接对计算机的内存进行操作
- 每个元素大小为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的使用
-
fs模块是Node的核心模块,不需要下载,直接引入即可使用
// 引入fs模块 var fs = require("fs");
-
fs中的大部分方法都为我们提供了两个版本:
- 同步方法:带sync的方法
- 同步方法会阻塞程序的执行
- 同步方法通过返回值返回结果
- 异步方法:不带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基础学习