抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

摘要:本文主要学习了Node的缓冲器,包括其特点和使用。

环境

Windows 10 企业版 LTSC 21H2
Node 18.14.0
NPM 9.3.1
NVM 1.1.12

1 概念

缓冲器即Buffer,是一个类似于数组的对象,用于表示固定长度的字节序列。

Buffer的本质是一段内存空间,用于处理二进制数据,所以常在文件操作、网络通信、图像处理等场景中使用。

2 特点

Buffer大小固定且无法调整。

Buffer中每个元素的大小为1字节,1个字节能够存储8个比特的二进制数据,也就是2的8次方,即从0到255。

3 使用

Node中创建Buffer的方式主要如下几种:

js
1
2
3
4
5
6
7
8
9
10
11
12
// 创建了一个长度为10字节的Buffer,相当于申请了10字节的内存空间,每个字节的值为0。
let buf_1 = Buffer.alloc(10);
console.log(buf_1);// <Buffer 00 00 00 00 00 00 00 00 00 00>
// 创建了一个长度为10字节的Buffer,创建速度比上面的快。Unsafe说明可能存在旧的数据,可能会影响执行结果。
let buf_2 = Buffer.allocUnsafe(10000);
console.log(buf_2);// <Buffer 80 a5 ab ae ... more bytes>
// 通过字符串创建。
let buf_3 = Buffer.from('hello');
console.log(buf_3);// <Buffer 68 65 6c 6c 6f>
// 通过数组创建。
let buf_4 = Buffer.from([1, 2, 3, 4, 5]);
console.log(buf_4);// <Buffer 01 02 03 04 05>

打印的结果是基于十六进制显示的,这是为了节省显示的空间。

使用toString()方法将Buffer转为字符串:

js
1
2
3
let buf = Buffer.from('hello');
console.log(buf);// <Buffer 68 65 6c 6c 6f>
console.log(buf.toString());// hello

通过使用显式的字符编码,可以在Buffer实例与字符串之间进行相互转换,默认使用utf8字符编码。:

js
1
2
3
4
5
6
let buf_1 = Buffer.from('hello', 'utf8');
console.log(buf_1);// <Buffer 68 65 6c 6c 6f>
console.log(buf_1.toString('utf8'));// hello
let buf_2 = Buffer.from('hello', 'base64');
console.log(buf_2);// <Buffer 85 e9 65>
console.log(buf_2.toString('base64'));// hello

使用数组下标读取和设置Buffer元素:

js
1
2
3
4
5
let buf = Buffer.from('hello');
console.log(buf);// <Buffer 68 65 6c 6c 6f>
console.log(buf[0]);// 104,即h字母在utf8编码中对应的十进制数字是104
buf[0] = 360;// 对应二进制为000101101000,一个元素存储一个字节,即八个比特,左边的高位被舍弃
console.log(buf[0]);// 104,左边的高位在舍弃后,等同于104

评论