Skip to content

Latest commit

 

History

History
33 lines (22 loc) · 1.44 KB

42.Node.js Buffer.md

File metadata and controls

33 lines (22 loc) · 1.44 KB

什么是 buffer? Buffer 是内存区域。 它由 Node.js Buffer 类实现。

为什么需要 buffer? Buffer 与流紧密相连。 当流处理器接收数据的速度快于其消化的速度时,则会将数据放入 buffer 中。

一个简单的场景是:当观看 YouTube 视频时,红线超过了观看点:即下载数据的速度比查看数据的速度快,且浏览器会对数据进行缓冲。

如何创建 buffer? 使用 Buffer.from()、Buffer.alloc() 和 Buffer.allocUnsafe() 方法可以创建 buffer。

const buf = Buffer.from('Hey!')

Buffer.from(array) Buffer.from(arrayBuffer[, byteOffset[, length]]) Buffer.from(buffer) Buffer.from(string[, encoding])

也可以只初始化 buffer(传入大小)。 以下会创建一个 1KB 的 buffer: const buf = Buffer.alloc(1024) //或 const buf = Buffer.allocUnsafe(1024)

虽然 alloc 和 allocUnsafe 均分配指定大小的 Buffer(以字节为单位),但是 alloc 创建的 Buffer 会被使用零进行初始化,而 allocUnsafe 创建的 Buffer 不会被初始化。 这意味着,尽管 allocUnsafe 比 alloc 要快得多,但是分配的内存片段可能包含可能敏感的旧数据。

当 Buffer 内存被读取时,如果内存中存在较旧的数据,则可以被访问或泄漏。 这就是真正使 allocUnsafe 不安全的原因,在使用它时必须格外小心。

使用 buffer 访问 buffer 的内容 Buffer(字节数组)可以像数组一样被访问: