crypto.randomFill(buffer[, offset][, size], callback)
buffer
<Buffer> | <TypedArray> | <DataView> 必须提供。offset
<number> 默认值:0
size
<number> 默认值:buffer.length - offset
callback
<Function>function(err, buf) {}
.
此函数类似于 crypto.randomBytes()
,但要求第一个参数是将被填充的 Buffer
。
它还要求传入回调。
如果未提供 callback
函数,则会抛出错误。
const buf = Buffer.alloc(10);
crypto.randomFill(buf, (err, buf) => {
if (err) throw err;
console.log(buf.toString('hex'));
});
crypto.randomFill(buf, 5, (err, buf) => {
if (err) throw err;
console.log(buf.toString('hex'));
});
// 以上等价于以下内容:
crypto.randomFill(buf, 5, 5, (err, buf) => {
if (err) throw err;
console.log(buf.toString('hex'));
});
任何 TypedArray
或 DataView
实例都可以作为 buffer
传入。
const a = new Uint32Array(10);
crypto.randomFill(a, (err, buf) => {
if (err) throw err;
console.log(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength)
.toString('hex'));
});
const b = new Float64Array(10);
crypto.randomFill(b, (err, buf) => {
if (err) throw err;
console.log(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength)
.toString('hex'));
});
const c = new DataView(new ArrayBuffer(10));
crypto.randomFill(c, (err, buf) => {
if (err) throw err;
console.log(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength)
.toString('hex'));
});
此 API 使用 libuv 的线程池,这对某些应用程序可能会产生意外的负面性能影响;有关更多信息,请参阅 UV_THREADPOOL_SIZE
文档。
crypto.randomFill()
的异步版本是在单个线程池请求中执行的。
为了最大限度地减少线程池任务长度变化,在执行客户端请求时将大型 randomFill
请求分区。
buffer
<Buffer> | <TypedArray> | <DataView> Must be supplied.offset
<number> Default:0
size
<number> Default:buffer.length - offset
callback
<Function>function(err, buf) {}
.
This function is similar to crypto.randomBytes()
but requires the first
argument to be a Buffer
that will be filled. It also
requires that a callback is passed in.
If the callback
function is not provided, an error will be thrown.
const buf = Buffer.alloc(10);
crypto.randomFill(buf, (err, buf) => {
if (err) throw err;
console.log(buf.toString('hex'));
});
crypto.randomFill(buf, 5, (err, buf) => {
if (err) throw err;
console.log(buf.toString('hex'));
});
// The above is equivalent to the following:
crypto.randomFill(buf, 5, 5, (err, buf) => {
if (err) throw err;
console.log(buf.toString('hex'));
});
Any TypedArray
or DataView
instance may be passed as buffer
.
const a = new Uint32Array(10);
crypto.randomFill(a, (err, buf) => {
if (err) throw err;
console.log(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength)
.toString('hex'));
});
const b = new Float64Array(10);
crypto.randomFill(b, (err, buf) => {
if (err) throw err;
console.log(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength)
.toString('hex'));
});
const c = new DataView(new ArrayBuffer(10));
crypto.randomFill(c, (err, buf) => {
if (err) throw err;
console.log(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength)
.toString('hex'));
});
This API uses libuv's threadpool, which can have surprising and
negative performance implications for some applications; see the
UV_THREADPOOL_SIZE
documentation for more information.
The asynchronous version of crypto.randomFill()
is carried out in a single
threadpool request. To minimize threadpool task length variation, partition
large randomFill
requests when doing so as part of fulfilling a client
request.