什么是buffer?
- buffer 是内存区域。它表示在v8 JavaScript引擎外部分配的固定大小的内存块(无法调整大小)。可以将 buffer 视为整数数组,每个整数代表一个数据字节。它由 nodejs 的 buffer 类实现。
- buffer用以帮助开发者处理二进制数据。
- buffer与流紧密相连。 当流处理器接收数据的速度快于其消化的速度,则将数据放入buffer中。
一个简单的场景是:当观看 YouTube 视频时,红线超过了观看点:即下载数据的速度比查看数据的速度快,且浏览器会对数据进行缓冲。
如何创建buffer? from()、alloc() 、allocUnsafe()
const buf = Buffer.from('Hey') // (传入内容)
// 也可以只初始化 buffer(传入大小)。 以下会创建一个 1KB 的 buffer:
const buf = Buffer.alloc(1024)
//或
const buf = Buffer.allocUnsafe(1024) // 快,但是分配的内存片段可能包含可能敏感的旧数据。如果内存中存在较旧的数据,则可以被访问或泄漏。
如何使用buffer?
// 访问buffer 的内容,向数组一样。
console.log(buf[0]) // 打印72。这些数字是 Unicode 码,用于标识 buffer 位置中的字符(H => 72、e => 101、y => 121)。
// 可以使用 toString() 方法打印 buffer 的全部内容
console.log(buf.toString())
// 获取 buffer 的长度
// console.log(buf.length)
// 迭代 buffer 的内容
for (const item of buf) {
console.log(item) //72 101 121 33
}
// 更改 buffer 的内容
buf.write('Hey!')
// 复制 buffer
buf.copy(bufcopy)
// 切片 buffer (如果要创建 buffer 的局部视图,则可以创建切片。 切片不是副本:原始 buffer 仍然是真正的来源。 如果那改变了,则切片也会改变。)
const slice = buf.slice(0, 2)