文章目录
- 1、概念
- 2.、特点
- 3、创建Buffer
- 3.1 Buffer.alloc
- 3.2 Buffer.allocUnsafe
- 3.3 Buffer.from
- 4、操作Buffer
- 4.1 Buffer 与字符串的转化
- 4.2 Buffer 的读写
- 参考
1、概念
Buffer是一个类似于数组的对象,用于表示固定长度的字节序列。Buffer本质是一段内存空间,专门用来处理二进制数据。- 在buffer中存储的都是·二进制数据·,但是在显示的时候都是以
16进制的形式显示。 - Buffer中的
内存不是通过JavaScript 分配的,而是在底层通过C++申请的。 - 也就是我们可以直接通过
Buffer来创建内存中的空间

2.、特点
- Buffer 大小
固定且无法调整 - Buffer
性能较好,可以直接对计算机内存进行操作 - 每个元素的大小为
1 字节(byte)

3、创建Buffer
- Node.js 中
创建 Buffer的方式主要如下几种:
3.1 Buffer.alloc
// 创建了一个长度为8字节的Buffer,相当于申请了8子节的内存空间,每个字节的值为0
const buf1 = Buffer.alloc(8)
console.log(buf1.length);
console.log(buf1);
输出:
8
<Buffer 00 00 00 00 00 00 00 00>
3.2 Buffer.allocUnsafe
//创建了一个长度为 8 字节的 Buffer,buffer 中可能存在旧的数据, 可能会影响执行结果,所以叫unsafe
const buf2 = Buffer.allocUnsafe(20)
注解:
allocUnsafe在分配内存之前是不会清空数据,如果这些数据恰好保存了用户的一些敏感数据就造成了数据泄露。
而alloc方法会将内存的数据进行清空之后再分配就会安全很多,但是缺点是性能没有allocUnsafe高。
3.3 Buffer.from
//通过字符串创建 Buffer
const buf3 = Buffer.from('hello')
console.log(buf3);
输出结果:
<Buffer 68 65 6c 6c 6f>
//通过数组创建 Buffer
const buf4 = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117])
console.log(buf4);
输出:
<Buffer 69 6c 6f 76 65 79 6f 75>
4、操作Buffer
4.1 Buffer 与字符串的转化
- 我们可以借助
toString方法将 Buffer 转为字符串
const buf4 = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117])
console.log(buf4.toString());
输出:
iloveyou
toString默认是按照utf-8 编码方式进行转换的。
4.2 Buffer 的读写
- Buffer 可以直接通过
数组[ ]的方式对数据进行处理。
1.读取
const buf3 = Buffer.from('hello')
console.log(buf3[0]);
输出:
104
输出的是ASCII码值。
- 修改
const buf3 = Buffer.from('hello')
console.log(buf3);//改变前
//<Buffer 68 65 6c 6c 6f>
buf3[0] = 97//ASCII值
console.log(buf3);//改变后
//<Buffer 61 65 6c 6c 6f>
在提醒一次,终端输出的时候默认是16进制
我们转化成字符串的形式在看一遍。
const buf3 = Buffer.from('hello')
console.log(buf3.toString());//改变前
//hello
buf3[0] = 97
console.log(buf3.toString());//改变后
//aello
注意:
- 如果修改的数值超过
255,则超过8 位数据会被舍弃
const buf = Buffer.from('hello');
buf[0] = 361;// 舍弃高位的数字 0001 0110 1001 => 0110 1001
console.log(buf);
- 一个 utf-8 的字符 一般 占
3 个字节
const buf = Buffer.from('你好');
console.log(buf);
输出:
<Buffer e4 bd a0 e5 a5 bd>
参考
尚硅谷2023版Node.js零基础视频教程,nodejs新手到高手








![[ 高并发]Java高并发编程系列第二篇--线程同步](https://img-blog.csdnimg.cn/img_convert/c6b8f3f7c738d69fbd794ae6997f7a30.png)




![迭代器设计模式(Iterator Design Pattern)[论点:概念、组成角色、相关图示、示例代码、框架中的运用、适用场景]](https://img-blog.csdnimg.cn/20e2f2a9584e413cb950f50070dc8213.png)





