Buffer
概念
Buffer中文译为缓冲区,是一个类似于 Array 的对象,用于表示固定长度的字节序列。
Buffer本质是一段内存空间,专门用来处理二进制数据。
特点
-
Buffer大小固定且无法调整
-
Buffer性能较好,可以直接对计算机内存进行操作
-
每个元素的大小为1字节(byte)
使用
创建Buffer
Node.js中创建Buffer的方式主要有如下几种:
1 Buffer.alloc()
1// 创建了一个长度为 10 字节的 Buffer
2// 相当于申请了 10 字节的内存空间,每个字节的值为 0
3let buf_1 = Buffer.alloc(10);
4console.log(buf_1); // <Buffer 00 00 00 00 00 00 00 00 00 00>
2 Buffer.allocUnsafe()
1// 创建了一个长度为20字节的 Buffer,buffer中可能存在旧的数据,可能会影响执行结果,所以叫 unsafe
2let buf_2 = Buffer.allocUnsafe(20);
3console.log(buf_2); // <Buffer 00 00 00 00 00 00 00 00 00 00>
3 Buffer.from()
1// 通过字符串创建
2let buf_3 = Buffer.from("hello")
3console.log(buf_3); // <Buffer 68 65 6c 6c 6f>
4
5// 通过数组创建
6let buf_4 = Buffer.from([1, 2, 3, 4, 5])
7console.log(buf_4); // <Buffer 01 02 03 04 05>
8
9
10// 在转化时,每一个字母都会被转化为这个字符在unicode码表中对应的数字,然后这个数字会转成二进制存到Buffer中
Buffer与字符串的转换
我们可以借助 toString()
方法将 Buffer转为字符串,toString()
默认按照 utf-8
编码方式进行转换的。
1let buf = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117]);
2console.log(buf.toString()); // iloveyou
Buffer的读写
Buffer可以直接通过 []
的方式对数据进行处理。
1let buf = Buffer.from("hello");
2// 读取
3console.log(buf[1]); // 101
4
5// 修改
6buf[1] = 97;
7
8// 查看修改后的字符串结果
9console.log(buf.toString()); // hallo
如果修改的数值超过 225,则超过 8 位数据会被舍弃
1let buf = Buffer.from("hello");
2buf[0] = 361; // 舍弃高位的数字 0001 0110 1001 => 0110 1001
3console.log(buf[0]); // 105
4console.log(buf.toString()); // iello
5console.log(buf[0].toString(2)); // 1101001
一个 utf-8 的字符一般占 3 个字节
1let buf = Buffer.from("你好");
2console.log(buf); // <Buffer e4 bd a0 e5 a5 bd>