Skip to content

AHABHGK

理解 Buffer

浏览器上很少遇到处理大量二进制数据的情况,所以 ES 规范中没有这方面的定义;Node 中处理网络协议、处理图片、接收上传文件等需要处理,JS 的字符串不能应付,所以有了 Buffer

Buffer 性能相关的用 C++ 写的 node_buffer 实现,其余部分用 JS

由于 Buffer 太过常见,Node 在进程启动时就用到,所以放在了 global 对象上,无需 require

Buffer 对象

使用 Buffer.allocBuffer.fromBuffer.allocUnsafe 代替 new Buffer

1function stringToBase64(req, res) {
2 // The request body should have the format of `{ string: 'foobar' }`.
3 const rawBytes = new Buffer(req.body.string);
4 const encoded = rawBytes.toString('base64');
5 res.end({ encoded });
6}

new Buffer(42) 创建一个 42 个字节的 缓存,new Buffer('abc') 创建一个 UTF-8 编码的字符串 'abc',上面代码攻击者可以故意传入一个数字,开一个很大的内存以进行攻击,请使用 Buffer.from() / Buffer.alloc()

Buffer 内存分配