分配一个大小为 size
字节的新 Buffer
。 如果 fill
为 undefined
,则用零填充 Buffer
。
const buf = Buffer.alloc(5);
console.log(buf);
// 打印: <Buffer 00 00 00 00 00>
如果指定了 fill
,则分配的 Buffer
通过调用 buf.fill(fill)
进行初始化。
const buf = Buffer.alloc(5, ‘a‘);
console.log(buf);
// 打印: <Buffer 61 61 61 61 61>
如果同时指定了 fill
和 encoding
,则分配的 Buffer
通过调用 buf.fill(fill, encoding)
进行初始化 。
const buf = Buffer.alloc(11, ‘aGVsbG8gd29ybGQ=‘, ‘base64‘);
console.log(buf);
// 打印: <Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64>
调用 Buffer.alloc()
可能比替代的 Buffer.allocUnsafe()
慢得多,但能确保新创建的 Buffer
实例的内容永远不会包含来自先前分配的敏感数据,包括可能尚未分配给 Buffer
的数据。
以这种方式创建的 Buffer
实例的底层内存是未初始化的。 新创建的 Buffer
的内容是未知的,可能包含敏感数据。 使用 Buffer.alloc()
可以创建以零初始化的 Buffer
实例。
const buf = Buffer.allocUnsafe(10);
console.log(buf);
// 打印(内容可能有所不同): <Buffer a0 8b 28 3f 01 00 00 00 50 32>
buf.fill(0);
console.log(buf);
// 打印: <Buffer 00 00 00 00 00 00 00 00 00 00>
如果没有提供 totalLength
,则通过将 list
中的 Buffer
实例的长度相加来计算得出。
如果提供了 totalLength
,则会强制转换为无符号整数。 如果 list
中的 Buffer
合并后的总长度大于 totalLength
,则结果会被截断到 totalLength
的长度。
// 用含有三个 `Buffer` 实例的数组创建一个单一的 `Buffer`。
const buf1 = Buffer.alloc(10);
const buf2 = Buffer.alloc(14);
const buf3 = Buffer.alloc(18);
const totalLength = buf1.length + buf2.length + buf3.length;
console.log(totalLength);
// 打印: 42
const bufA = Buffer.concat([buf1, buf2, buf3], totalLength);
console.log(bufA);
// 打印: <Buffer 00 00 00 00 ...>
console.log(bufA.length);
// 打印: 42
const arr = new Uint16Array(2);
arr[0] = 5000;
arr[1] = 4000;
// 与 `arr` 共享内存。
const buf = Buffer.from(arr.buffer);
console.log(buf);
// 打印: <Buffer 88 13 a0 0f>
// 改变原先的 Uint16Array 也会改变 Buffer。
arr[1] = 6000;
console.log(buf);
// 打印: <Buffer 88 13 70 17>
const buf1 = Buffer.from(‘buffer‘);
const buf2 = Buffer.from(buf1);
buf1[0] = 0x61;
console.log(buf1.toString());
// 打印: auffer
console.log(buf2.toString());
// 打印: buffer
如果 obj
是一个 Buffer
,则返回 true
,否则返回 false
。
如果 encoding
是支持的字符编码的名称,则返回 true
,否则返回 false
。
console.log(Buffer.isEncoding(‘utf-8‘));
// 打印: true
console.log(Buffer.isEncoding(‘hex‘));
// 打印: true
console.log(Buffer.isEncoding(‘utf/8‘));
// 打印: false
console.log(Buffer.isEncoding(‘‘));
// 打印: false
buf.buffer
const arrayBuffer = new ArrayBuffer(16);
const buffer = Buffer.from(arrayBuffer);
console.log(buffer.buffer === arrayBuffer);
// 打印: true
buf.entries()
用 buf
的内容创建并返回一个 [index, byte]
形式的迭代器。
// 记录 `Buffer` 的全部内容。
const buf = Buffer.from(‘buffer‘);
for (const pair of buf.entries()) {
console.log(pair);
}
// 打印:
// [0, 98]
// [1, 117]
// [2, 102]
// [3, 102]
// [4, 101]
// [5, 114]
buf.equals(otherBuffer)
如果 buf
与 otherBuffer
具有完全相同的字节,则返回 true
,否则返回 false
。 相当于 buf.compare(otherBuffer) === 0
。
const buf1 = Buffer.from(‘ABC‘);
const buf2 = Buffer.from(‘414243‘, ‘hex‘);
const buf3 = Buffer.from(‘ABCD‘);
console.log(buf1.equals(buf2));
// 打印: true
console.log(buf1.equals(buf3));
// 打印: false
buf.includes(value[, byteOffset][, encoding])
const buf = Buffer.from(‘this is a buffer‘);
console.log(buf.includes(‘this‘));
// 打印: true
console.log(buf.includes(‘is‘));
// 打印: true
console.log(buf.includes(Buffer.from(‘a buffer‘)));
// 打印: true
console.log(buf.includes(97));
// 打印: true(97 是 ‘a‘ 的十进制 ASCII 值)
console.log(buf.includes(Buffer.from(‘a buffer example‘)));
// 打印: false
console.log(buf.includes(Buffer.from(‘a buffer example‘).slice(0, 8)));
// 打印: true
console.log(buf.includes(‘this‘, 4));
// 打印: false
buf.indexOf(value[, byteOffset][, encoding])
const buf = Buffer.from(‘this is a buffer‘);
console.log(buf.indexOf(‘this‘));
// 打印: 0
console.log(buf.indexOf(‘is‘));
// 打印: 2
console.log(buf.indexOf(Buffer.from(‘a buffer‘)));
// 打印: 8
console.log(buf.indexOf(97));
// 打印: 8(97 是 ‘a‘ 的十进制 ASCII 值)
console.log(buf.indexOf(Buffer.from(‘a buffer example‘)));
// 打印: -1
console.log(buf.indexOf(Buffer.from(‘a buffer example‘).slice(0, 8)));
// 打印: 8
const utf16Buffer = Buffer.from(‘\u039a\u0391\u03a3\u03a3\u0395‘, ‘utf16le‘);
console.log(utf16Buffer.indexOf(‘\u03a3‘, 0, ‘utf16le‘));
// 打印: 4
console.log(utf16Buffer.indexOf(‘\u03a3‘, -4, ‘utf16le‘));
// 打印: 6
buf.keys()
创建并返回 buf
键名(索引)的迭代器。
const buf = Buffer.from(‘buffer‘);
for (const key of buf.keys()) {
console.log(key);
}
// 打印:
// 0
// 1
// 2
// 3
// 4
// 5
buf.length
// 创建一个 `Buffer`,并使用 UTF-8 写入一个短的字符串。
const buf = Buffer.alloc(1234);
console.log(buf.length);
// 打印: 1234
buf.write(‘http://nodejs.cn/‘, 0, ‘utf8‘);
console.log(buf.length);
// 打印: 1234
buf.values()
创建并返回 buf
键值(字节)的迭代器。 当对 Buffer
使用 for..of
时会调用该函数。
const buf = Buffer.from(‘buffer‘);
for (const value of buf.values()) {
console.log(value);
}
// 打印:
// 98
// 117
// 102
// 102
// 101
// 114
for (const value of buf) {
console.log(value);
}
// 打印:
// 98
// 117
// 102
// 102
// 101
// 114
原文:https://www.cnblogs.com/little-oil/p/14759909.html