Buffer (缓冲)
Buufer类用于处理二进制数据流。
Buffer 类的实例类似于整数数组,但 Buffer 的大小是固定的、且在 V8 堆外分配物理内存。
Buffer 的大小在被创建时确定,且无法调整。
Buffer 类在 Node.js 中是一个全局变量,因此无需使用 require(‘buffer’).Buffer。
1.创建Buffer
Buffer.alloc(size[, fill[, encoding]])
Buffer.allocUnsafe(size)
Buffer.from()
console.log(Buffer.alloc(5)); //'<Buffer 00 00 00 00 00>'
console.log(Buffer.alloc(5,1)); //'<Buffer 01 01 01 01 01>'
'/* Buffer.allocUnsafe()创建的 Buffer 实例的底层内存是未初始化的。 新创建的 Buffer 的内容是未知的,且可能包含敏感数据。 使用前可以使用 buf.fill(0) 初始化 Buffer 实例为0。 */'
console.log(Buffer.allocUnsafe(5)); //'<Buffer 00 00 64 65 00>'
console.log(Buffer.from([1,2,3,4])); //'<Buffer 01 02 03 04>'
'/* Buffer.from()可以指定字符串的编码,默认为‘utf-8’ */'
console.log(Buffer.from('test')); //'<Buffer 74 65 73 74>'
console.log(Buffer.from('test','base64')); //'<Buffer b5 eb 2d>'
2.类属性和类方法
Buffer.byteLength:返回一个字符串的实际字节长度
console.log(Buffer.byteLength('test')); //4
console.log(Buffer.byteLength('测试')); //6
Buffer.isBuffer():如果 obj 是一个 Buffer 则返回 true ,否则返回 false 。
console.log(Buffer.isBuffer('test')); //false
console.log(Buffer.isBuffer(Buffer.from('test'))); //true
Buffer.concat():返回一个合并了 list 中所有 Buffer 实例的新建的 Buffer 。
const buf1 = Buffer.from('Hello ');
const buf2 = Buffer.from('World ');
const buf3 = Buffer.from('!');
const buf = Buffer.concat([buf1,buf2,buf3]);
console.log(buf.toString()); //'Hello World !'
3.实例属性和方法
buf.length
const buf = Buffer.from('this is a test!');
console.log(buf.length); //15
buf.fill(value[, offset[, end]][, encoding]):填充Buffer
- value | | 用来填充 buf 的值。
- offset 开始填充 buf 前要跳过的字节数。默认: 0。
- end 结束填充 buf 的位置(不包含)。默认: buf.length。
- encoding 如果 value 是一个字符串,则这是它的字符编码。默认: ‘utf8’。
如果未指定 offset 和 end,则填充整个 buf。
const buf1 = Buffer.allocUnsafe(5);
buf1.fill(10,2,4); //<Buffer 04 00 0a 0a 00>
buf.equals():比较Buffer的内容
const buf2 = Buffer.from('test');
const buf3 = Buffer.from('test');
const buf4 = Buffer.from('testa');
console.log(buf2.equals(buf3)); //true
console.log(buf2.equals(buf4)); //false
buf.indexOf(value[, byteOffset][, encoding])
console.log(buf3.indexOf('es')); //1
console.log(buf3.indexOf('esa')); //-1
buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])
- target : 要拷贝进的 Buffer 或 Uint8Array。
- targetStart : target 中开始拷贝进的偏移量。 默认: 0
- sourceStart : buf 中开始拷贝的偏移量。 当 targetStart 为 undefined 时忽略。 默认: 0
- sourceEnd : buf 中结束拷贝的偏移量(不包含)。 当 sourceStart 为 undefined时忽略。 默认: buf.length
const buf5 = Buffer.allocUnsafe(10);
const buf6 = Buffer.allocUnsafe(10).fill('!');
for (let i = 0; i < 10; i++) {
buf5[i] = i + 97;
}
buf5.copy(buf6, 2, 4, 6);
console.log(buf6.toString()); //!!ef!!!!!!