定义
- Buffer 中文译为缓冲区,是一个类似于 Array 的对象,用于表示固定长度的字节序列。
- Buffer 就是一段固定长度的内存空间,用于处理二进制数据。
特点
- Buffer 大小固定且无法调整。
- Buffer 性能较好,可以直接对计算机内存进行操作。
- 每个元奈的大小为 1字节 (byte)
创建 Buffer
alloc
1
2let buf = Buffer.alloc(10); // 分配 10 个字节全新的空间,每一位都是 0
console.log(buf); // 输出结果:<Buffer 00 00 00 00 00 00 00 00 00 00>allocUnsafe
1
2let buf = Buffer.allocUnsafe(10); // 分配 10 个字节空间,空间原数据不会被清 0 allocUnsafe 比 alloc 快
console.log(buf); // 输出结果:<Buffer 00 00 00 12 00 fd 00 00 00 00> 每次都不一样from
1
2let buf = Buffer.from('Hello');
console.log(buf); // 输出结果:<Buffer 48 65 6c 6c 6f> 内存中存储每个字符的 16 进制 ASCII 码
其他操作
Buffer 转字符串
1
2let buf = Buffer.from([72, 101, 108, 108, 111]); // 每位字符的 10 进制 ASCII 码
console.log(buf.toString()); // 输出结果:Hello读取和修改
1
2
3
4let buf = Buffer.from('Hello');
console.log(buf[0]); // 输出结果:72
buf[0] = 65;
console.log(buf.toString()); // 输出结果:Aello
注意事项
溢出:每个字节占 8 位二进制空间,若存储的数据大于 8 位,Node 会舍去高位,保留低八位。
1
2
3let buf = Buffer.from('Hello');
buf[0] = 257; // 十进制 257 转二进制:1 0000 0001 实际存储值为: 0000 0001
console.log(buf); // 输出结果:<Buffer 01 65 6c 6c 6f>存储中文:每个中文会根据文件的编码格式进行转换,如 utf-8 将每个汉字转为 3 个字节存储。
1
2let buf = Buffer.from('你好');
console.log(buf); // 输出结果:<Buffer e4 bd a0 e5 a5 bd>