Buffer(缓冲器)
文章目录
1.概念
Buffer 是一个类似于数组的 对象
,用于表示固定长度的字节序列
Buffer 本质是一段内存空间,专门用来处理 二级制数据
。
2.特点
- Buffer 大小固定且无法调整
- Buffer 性能较好,可以直接对计算机内存进行操作
- 每个元素的大小为1字节(byte)
3.使用
3-1.创建Buffer
Node.js 中创建 Buffer 的方式主要如下几种:
-
Buffer.alloc
// 创建了一个长度为10字节的Buffer,相当于申请了10字节的内存空间,每个字节的值为0 let buf_1 = Buffer.alloc(10) // 结果为:<Buffer 00 00 00 00 00 00 00 00 00 00>,其输出表示方式是十六进制
-
Buffer.allocUnsafe
// 创建了一个长度为10字节的Buffer,Buffer中可能存在旧的数据,可能会影响执行结果,所以叫unsafe let buf_2 = Buffer.allocUnsafe(10)
-
Buffer.from
// 通过字符串创建Buffer let buf_3 = Buffer.from('hello') // 通过数组创建Buffer let buf_4 = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117])
3-2.Buffer与字符串的转化
我们可以借助 toString
方法将 Buffer 转为字符串。
// Buffer与字符串的转换
let buf = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117])
// 使用toString方法转换为字符串
console.log(buf.toString()) // 默认采用utf-8
toString 默认是按照
utf-8
编码方式进行转换的。
3-3.Buffer的读写
Buffer 可以直接通过 []
的方式对数据进行处理。
let buf_2 = Buffer.from('hello')
console.log(buf_2[0].toString(2)) // 得到的结果是二进制
console.log(buf_2)
// 读取
console.log(buf_2[0]) // 得到的结果为十进制
// 修改
buf_2[0] = 95
console.log(buf_2)
// 查看字符串结果
console.log(buf_2.toString())
注意:
- 如果修改的数值超过
255
,则超过8位数据会被舍弃- 一个
utf-8
的字符 一般占3个字节
4.注意事项
4-1.溢出问题
众所周知,二进制所能存储的最大数字是 255,一旦超过这个,计算机就会舍弃掉高位的
let buf_3 = Buffer.from('hello')
buf_3[0] = 361
// 0001 0110 1001 => 0110 1001(舍弃高位后的二进制)
console.log(buf_3)
console.log(buf_3.toString())
4-2.中文字符创建 Buffer
通过中文字符串来创建 Buffer,我们可以发现 一个 utf-8 的中文字符是占三个字节的
let buf_4 = Buffer.from('你好')
console.log(buf_4)