Nodejs 为什么 Buffer.from(array) 替代 new Buffer(array) ?避免使用 new 的原因?

发布于 1周前 作者 h691938207 来自 nodejs/Nestjs

Nodejs 为什么 Buffer.from(array) 替代 new Buffer(array) ?避免使用 new 的原因?
以及类似的静态方法替代 new 的问题. 在 JavaScript 中这样做是基于什么原因?

11 回复

我记得是 new Buffer()可以接受不同类型的参数 产生不同的结果,容易引起歧义吧,所以都给改掉了


如果每次传入的 array 一样,生成的都是同一个 Buffer。但是 new Buffer 每次都会生成一个新的 Buffer,即使每次调用的时候都是同样的 array

以上是我猜的,我没写过 js

为什么这个帖子是黑色的背景?

可以看下 joshua bloch 的 effective java 关于静态工厂的章节
蛤蛤,java 狗撸过

buffer 成为内置模块了,文档上写了,不过其他的我就不记得了~

查了一下,Buffer.from(array) 还有一个调用的方式,那个能够直接用 TypedArray 的 buffer,所以用 new 容易引起歧义

我刚去看了文档, 您就发来了链接. 心有灵犀呀~

在Node.js中,Buffer.from(array)替代new Buffer(array)主要有以下几个原因:

  1. 语法现代化Buffer.from()是ES6(ECMAScript 2015)及以后版本中推荐的创建Buffer对象的方法,更符合现代JavaScript的语法规范。而new Buffer(array)则是早期Node.js版本中使用的语法,逐渐被淘汰。
  2. 安全性new Buffer(array)在某些情况下可能引入安全隐患,如未初始化的内存区域可能包含敏感数据。而Buffer.from()则提供了更安全的内存初始化方式。
  3. 性能优化Buffer.from()在内部进行了性能优化,相比new Buffer(array)在处理大数据量时可能具有更好的性能表现。
  4. 语义明确Buffer.from()语义更加明确,直接表达了从什么数据创建Buffer对象的意图,而new Buffer(array)则可能与其他new操作符的使用产生混淆。

以下是一个示例代码,展示了如何使用Buffer.from()替代new Buffer(array)

// 不推荐使用的语法
// var buffer = new Buffer([1, 2, 3, 4]);

// 推荐使用的语法
var buffer = Buffer.from([1, 2, 3, 4]);

console.log(buffer); // 输出: <Buffer 01 02 03 04>

综上所述,为了避免潜在的安全隐患、提高代码的可读性和性能,建议使用Buffer.from()替代new Buffer(array)

回到顶部