Skip to content

Buffer

TIP

Buffer 是一个类似于数组的 对象,用于表示固定长度的字节序列。

Buffer 本质是一段内存空间,专门用来处理 二进制数据。

虽然该 Buffer 类在全局范围内可用,但仍建议通过 import 或 require 语句显式引用它。

特点

  • Buffer 大小固定且无法调整
  • Buffer 性能较好,可以直接对计算机内存进行操作
  • 每个元素的大小为 1 字节(byte)
js
const { Buffer } = require('node:buffer')

// 创建了一个长度为 10 字节的 Buffer,相当于申请了 10 字节的内存空间,每个字节的值为 1
// alloc 第二个参数不填,相当于填充了0
const buf1 = Buffer.alloc(10, 1)
console.log(buf1)  // 结果为 <Buffer 01 01 01 01 01 01 01 01 01 01>


/**
 * 创建了一个长度为 10 字节的 Buffer
 * 它比 alloc 更快
 * buffer 实例可能包含旧数据
 * 可用 fill(), write() 或其他填充 buffer 的函数进行覆盖内容
 */
Buffer.allocUnsafe(10)

// 创建一个包含字符串 'hello' 的 UTF-8 编码字节的 Buffer:
// 字符串之间 Buffer 转换时,可以指定字符编码。如果未指定字符编码,则默认使用 UTF-8
const buf3 = Buffer.from('hello', 'utf8');
console.log(buf3) // 结果为 <Buffer 68 65 6c 6c 6f>
console.log(buf3.toString('hex')) // 结果为 68656c6c6f
console.log(buf3.toString('base64')) // 结果为 aGVsbG8=

// buf4[1] = Buffer 可以直接通过 [ ] 的方式对数据进行处理。
const buf4 = Buffer.from([1, 2, 3])
console.log(buf4, buf4[1], '读取')
buf4[1] = 97
console.log(buf4.toString(), '写入后')
// 注意:
//   如果修改的数值超过 255 ,则超过 8 位数据会被舍弃
//   一个 utf-8 的字符 一般 占 3 个字节

Released under the MIT License.