Buffer.allocUnsafe(size)
- size {Number}
分配一個 size 字節大小的新的非零填充(non-zero-filled)的 Buffer。size 必須小於等於 require('buffer').kMaxLength(在64位架構上 kMaxLength 的大小是 (2^31)-1)的值,否則將拋出一個 RangeError 的錯誤。如果 size 小於 0 將創建一個特定的 0 長度(zero-length )的 Buffer。
以這種方式創建的 Buffer 實例的底層內存是沒被初始化過的。新創建的 Buffer 的內容是未知的,並可能包含敏感數據。通過使用 buf.fill(0) 將這個 Buffer 初始化為零。
const buf = Buffer.allocUnsafe(5);
console.log(buf);
// <Buffer 78 e0 82 02 01>
// (octets will be different, every time)
buf.fill(0);
console.log(buf);
// <Buffer 00 00 00 00 00>
如果 size 不是一個數字則拋出一個 TypeError 錯誤。
請注意,Buffer 模塊預分配一個大小為 Buffer.poolSize 的內部 Buffer 實例作為一個快速分配池,僅當 size 小於等於 Buffer.poolSize >> 1 (浮點類型的 Buffer.poolSize 應該除以2)時,用於分配通過 Buffer.allocUnsafe(size) 創建的新的 Buffer 實例(和 new Buffer(size) 構造函數)。默認的 Buffer.poolSize 值為 8192 ,但可以被修改。+
使用這個預分配的內部內存池是調用 Buffer.alloc(size, fill) 和 Buffer.allocUnsafe(size).fill(fill) 的關鍵不同之處。特別是,如果 size 小於或等於 Buffer.poolSize 的一半時,Buffer.allocUnsafe(size).fill(fill) 將使用內部的 Buffer 池,而 Buffer.alloc(size, fill) 將絕不會使用這個內部的 Buffer 池。在一個應用程序需要 Buffer.allocUnsafe(size) 提供額外的性能時,(了解)這個細微的不同之處是非常重要的。