2015-08-29 2 views
2

Является ли это ошибкой с узлом или ожидаемым поведением? Воспроизводимое в 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> 
+0

Я предполагаю, что мы не должны брать что-либо из буфера, прежде чем мы что-то в него вносим, ​​поэтому nodejs просто не пустят его для нас (так как это требует дополнительного времени для перезаписи данных в буфере)? – fuyushimoya

ответ

3

Это почти всегда было так. Нулевая память добавляет накладные расходы, поэтому, когда вы создаете новый буфер, вы видите содержимое того, что содержалось в нем.

Если вам нужно/хочу обнулить буфер, просто сделать buffer.fill(0);

UPDATE:

С узла v6.0.0 Buffer creation API изменилось. Теперь вы можете прямо выделить нулевое заполнение через Buffer.alloc(size) и получить старое поведение через Buffer.allocUnsafe(size). Эти новые API-интерфейсы Buffer также были переданы в v4x версии v4.5.0. Создание стиля создания буфера new Buffer() считается устаревшим и будет удалено в будущей основной версии (возможно, v8.0.0 в самое ближайшее время, если бы мне пришлось угадать, чтобы обеспечить жесткий цикл устаревания).

Кроме того, поскольку узел v5.10.0 (и v4.5.0 для ветви v4.x), вы можете передать аргумент --zero-fill-buffers двоичному элементу узла, который будет молча и автоматически заполнять все буферы после создания.

Смежные вопросы