一、Buffer
中文译为“缓冲区”,是一个类似于Array的对象,用于表示固定长度的字节序列
换句话说 就是一段固定长度的内存空间,用于处理二进制数据
特点
大小固定且无法调整
性能较好,可以直接对计算机内存进行操作
每个元素的大小为1字节
创建方式
- alloc
- allocUnsafe
- from
// alloc 表示分配,分配一块内存空间
let alloc = Buffer.alloc(10) // 创建一个10字节的buffer
console.log("buf", alloc)
// <Buffer 00 00 00 00 00 00 00 00 00 00> 每个二进制位都会归零
// allocUnsafe 不安全 创建的buffer会包含旧的内存数据 不会对旧数据归零 速度比alloc快
let allocUnsafe = Buffer.allocUnsafe(10) // 创建一个10字节的buffer
console.log("allocUnsafe", allocUnsafe)
// from 可以将一个字符串或者数组转为buffer
let fromStr = Buffer.from('hello')
console.log(fromStr) // <Buffer 68 65 6c 6c 6f>
let fromArr = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117])
console.log(fromArr) // <Buffer 69 6c 6f 76 65 79 6f 75>
// 在转换时 每个字母都会转换为在unicode码表当中对应的数字 数字会转换成2进制存到buffer中
buffer与字符串的转化
借助toString
let fromArr = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117])
console.log(fromArr.toString()) // 默认采用utf-8的方式进行转换let fromArr = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117])
console.log(fromArr.toString()) // iloveyou
// 默认采用utf-8的方式进行转换
buffer的读写
可以直接通过[]的方式对数据进行处理
let fromStr = Buffer.from('hello')
// 读取
console.log(fromStr[1]) // 101 十进制
console.log(fromStr[1].toString(2)) // 01100101 二进制
console.log(fromStr[1].toString(16)) // 65 十六进制
// 修改
fromStr[0] = 97
console.log(fromStr[0]) // 97
console.log(fromStr[0].toString(16)) // 61
console.log(fromStr) // <Buffer 61 65 6c 6c 6f>
console.log(fromStr.toString()) // aello
溢出
如果修改的值超过255,则超过8为数据会被舍弃
// 溢出
fromStr[0] = 361 // 超过255 则超过8位的值会被舍弃
console.log(fromStr[0].toString(2)) // 361的二进制为:0001 0110 1001 但由于超过255 溢出 所以 打印出来是 0110 1001 (十六进制为69 十进制为105)
console.log(fromStr[0])
console.log(fromStr) // <Buffer 69 65 6c 6c 6f>
中文
一个utf-8的自负一般占3个字节
let buf = Buffer.from('你好')
console.log(buf) // <Buffer e4 bd a0 e5 a5 bd>