node学习笔记-Buffer

162 阅读2分钟

一、Buffer

中文译为“缓冲区”,是一个类似于Array的对象,用于表示固定长度的字节序列

换句话说 就是一段固定长度的内存空间,用于处理二进制数据

特点

大小固定且无法调整

性能较好,可以直接对计算机内存进行操作

每个元素的大小为1字节

创建方式

  1. alloc
  2. allocUnsafe
  3. 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>