新节点缓冲区已经有数据?
new node buffers already have data?
这是节点错误还是预期行为?在 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>
几乎一直都是这样。清零内存会增加开销,因此当您创建一个新缓冲区时,您会看到最后包含的那块内存的内容。
如果您need/want将缓冲区归零,只需buffer.fill(0);
更新:
对于节点 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,以允许硬弃用周期).
此外,由于节点 v5.10.0(以及 v4.x 分支的 v4.5.0),您可以将 --zero-fill-buffers
参数传递给节点二进制文件,这将静默并自动零填充所有缓冲区创建时。
这是节点错误还是预期行为?在 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>
几乎一直都是这样。清零内存会增加开销,因此当您创建一个新缓冲区时,您会看到最后包含的那块内存的内容。
如果您need/want将缓冲区归零,只需buffer.fill(0);
更新:
对于节点 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,以允许硬弃用周期).
此外,由于节点 v5.10.0(以及 v4.x 分支的 v4.5.0),您可以将 --zero-fill-buffers
参数传递给节点二进制文件,这将静默并自动零填充所有缓冲区创建时。