Buffer 类被引入作为 NodeJS API 的一部分,使其可以在 TCP 流或文件系统操作等场景中处理二进制数据流。Buffer 对象用于表示固定长度的字节序列。
Buffer 属于 Global 对象,使用时不需引入,且 Buffer 的大小在创建时确定,无法调整。
- 创建
-
Buffer.alloc(bufferLen)
和Buffer.allocUnsafe(bufferLen)
-
const { Buffer } = require("buffer");
let buf1 = Buffer.alloc(1);
let buf2 = Buffer.allocUnsafe(1);
console.log(buf1);
console.log(buf2);
Buffer.alloc 创建的Buffer是被初始化过的,即每一项都用 00 填充。而 Buffer.allocUnsafe 创建的Buffer并没有经过初始化,是直接使用内存中闲置的缓冲区
Buffer.from(string/array/buffer, unicode)
const { Buffer } = require("buffer");;
let bufFromStr = Buffer.from("hello world", "utf-8");
let bufFromArr = Buffer.from([1,10,"8","$"]);
let bufFromBuffer = Buffer.from(bufFromStr);
console.log(bufFromStr);
console.log(bufFromArr);
console.log(bufFromBuffer);
console.log(bufFromBuffer == bufFromStr);
bufFromStr = bufFromArr;
console.log(bufFromBuffer);
Buffer.from 获取的会重新创建一个全新的地址,而不是直接引用之前的地址
- 填充:
buf.fill(value, start=0, end=bufferLen)
value:将要填充的数据;
start:填充数据的开始位置,不指定默认为 0;
end:填充数据的结束位置,不指定默认为 Buffer 的长度。
let buf1 = Buffer.alloc(3);
let buf2 = Buffer.alloc(3);
console.log(buf1.fill(1));
console.log(buf2.fill(1,0,1));
buf1 将所有位置都填充,而 buf2 只是从下标为 0 开始填充,填充的长度为 1
- 复制:
buf.copy(target, targetStart, sourceStart, sourceEnd)
target:目标 Buffer
targetStart:目标 Buffer 的起始位置
sourceStart:源 Buffer 的起始位置
sourceEnd:源 Buffer 的结束位置(不包含)
let buf1 = Buffer.alloc(3);
let buf2 = Buffer.alloc(3);
buf1.fill(abc);
buf1.copy(buf2,1,0,1);
console.log(buf1);
console.log(buf2);
从 buf1 0 号位置开始复制到 1 号(不包括)位置,至 buf2 的 1 号位置
- 截取 (类似字符串,数组):
buf.slice
- 查找 (类似字符串,数组):
buf.indexOf
- 拼接(类似字符串,数组):
buf.concat
网友评论