首页 > 其他 > 详细

Node 之 Buffer

时间:2021-05-12 21:10:46      阅读:33      评论:0      收藏:0      [点我收藏+]

Buffer(缓冲器)

Buffer.alloc(size[, fill[, encoding]])

分配一个大小为 size 字节的新 Buffer。 如果 fillundefined,则用零填充 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>

如果同时指定了 fillencoding,则分配的 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.allocUnsafe(size)

以这种方式创建的 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>

Buffer.concat(list[, totalLength])

如果没有提供 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

Buffer.from

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

Buffer.isBuffer(obj)

如果 obj 是一个 Buffer,则返回 true,否则返回 false

Buffer.isEncoding(encoding)

如果 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)

如果 bufotherBuffer 具有完全相同的字节,则返回 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

Node 之 Buffer

原文:https://www.cnblogs.com/little-oil/p/14759909.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!