NodeJS Buffer.alloc() 方法有助于创建具有给定大小的新缓冲区。如果给定的大小恰好大于 buffer.constants.MAX_LENGTH 或小于 0,它将抛出类型为 ERR_INVALID_ARG_VALUE 的错误。如果给定的大小不是数字,它将抛出 typeError。
此外,据说使用 Buffer.alloc() 创建缓冲区比其替代 Buffer.allocUnsafe() 慢,但它注意新创建的缓冲区不包含来自先前缓冲区的任何敏感数据以及之前为创建缓冲区分配的数据。
语法
以下是NodeJS Buffer.alloc()方法的语法 -
Buffer.alloc(size[, fill[, encoding]])
参数
此方法接受三个参数。下面将对此进行解释。
- size −(必填)这是整数值,是要创建的缓冲区的长度。
- fill −(可选)此处 fill 是您希望缓冲区填充的值。默认情况下,该值为 0。
- encoding −(可选)默认使用的编码是 utf8。如果使用字符串,则编码是必需的。
返回值
Buffer.alloc() 方法将返回给定大小的缓冲区。
例在示例中,将使用NodeJS Buffer.alloc()方法创建一个缓冲区 -
const mybuffer = Buffer.alloc(5);
console.log(mybuffer);
输出
缓冲区的大小为 5。由于我们尚未使用 fill,因此将默认值 0 填充到大小为 5 的缓冲区中。
<Buffer 00 00 00 00 00>
例
在示例中,将使用 Buffer.alloc() 方法创建一个缓冲区并填充变量 -
const mybuffer = Buffer.alloc(5, 5);
console.log(mybuffer);
输出
缓冲区的大小为 5。由于我们使用 fill 作为 5。
<Buffer 05 05 05 05 05>
例
在示例中,将使用 Buffer.alloc() 方法创建一个缓冲区,并使用填充作为字符串值 -
const mybuffer = Buffer.alloc(5, 'a');
console.log(mybuffer);
console.log(mybuffer.toString());
输出
缓冲区的大小为 5。由于我们使用了 fill 是一个字符串:'a'。
<Buffer 61 61 61 61 61>
aaaaa
aaaaa
例
在此示例中,如果使用的大小不是数字,将看到抛出的错误。
const mybuffer = Buffer.alloc('1');
console.log(mybuffer);
console.log(mybuffer.toString());
输出
由于使用的大小是一个字符串,因此它是一个无效值,因为 size 必须是整数值。当您执行上述程序时,它将抛出如下所示的错误。
TypeError [ERR_INVALID_ARG_TYPE]: The "size" argument must be of type number. Received type string
at Function.alloc (buffer.js:271:3)
at Object.<anonymous> (C:\nodejsProject\src\testbuffer.js:1:25)
at Module._compile (internal/modules/cjs/loader.js:816:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:827:10)
at Module.load (internal/modules/cjs/loader.js:685:32)
at Function.Module._load (internal/modules/cjs/loader.js:620:12)
at Function.Module.runMain (internal/modules/cjs/loader.js:877:12)
at internal/main/run_main_module.js:21:11
at Function.alloc (buffer.js:271:3)
at Object.<anonymous> (C:\nodejsProject\src\testbuffer.js:1:25)
at Module._compile (internal/modules/cjs/loader.js:816:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:827:10)
at Module.load (internal/modules/cjs/loader.js:685:32)
at Function.Module._load (internal/modules/cjs/loader.js:620:12)
at Function.Module.runMain (internal/modules/cjs/loader.js:877:12)
at internal/main/run_main_module.js:21:11