这是 Node 或预期行为的错误吗?可在 0.12.7
和 io 3.1.0
中重现:
> new Buffer(5)
<Buffer 00 00 02 00 00>
> new Buffer(5)
<Buffer 00 00 00 00 00>
> new Buffer(5)
<Buffer 28 94 00 02 01>
> new Buffer(5)
<Buffer 00 00 00 02 00>
> new Buffer(5)
<Buffer 00 00 00 00 00>
> new Buffer(5)
<Buffer 00 98 94 00 02>
最佳答案
情况几乎一直如此。将内存清零会增加开销,因此当您创建新的缓冲区时,您会看到该内存块最后包含的内容。
如果您需要/想要将缓冲区清零,只需执行 buffer.fill(0);
更新:
使用 Node v6.0.0 Buffer creation API已经改变。现在,您可以通过 Buffer.alloc(size) 直接分配零填充,并通过 Buffer.allocUnsafe(size) 获取旧行为。这些新的 Buffer API 也已在 v4.5.0 中向后移植到 v4.x。 new Buffer()
风格的 Buffer 创建现在已被视为已弃用 ,并将在未来的主要版本中删除(如果我不得不猜测的话,最早可能是 v8.0.0,以允许硬弃用周期)。
此外,从 Node v5.10.0(以及 v4.x 分支的 v4.5.0)开始,您可以将 --zero-fill-buffers
参数传递给 Node 二进制文件,该二进制文件将自动静默地传递创建时对所有缓冲区进行零填充。
关于javascript - 新 Node 缓冲区已经有数据了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32284426/