创建buffer类
Buffer.alloc(size[, fill[, encoding]]): 返回一个指定大小的 Buffer 实例,如果没有设置 fill,则默认填满 0
Buffer.allocUnsafe(size): 返回一个指定大小的 Buffer 实例,但是它不会被初始化,所以它可能包含敏感的数据
Buffer.allocUnsafeSlow(size)
Buffer.from(array): 返回一个被 array 的值初始化的新的 Buffer 实例(传入的 array 的元素只能是数字,不然就会自动被 0 覆盖)
Buffer.from(arrayBuffer[, byteOffset[, length]]): 返回一个新建的与给定的 ArrayBuffer 共享同一内存的 Buffer。
Buffer.from(buffer): 复制传入的 Buffer 实例的数据,并返回一个新的 Buffer 实例
Buffer.from(string[, encoding]): 返回一个被 string 的值初始化的新的 Buffer 实例
//长度为10被0填充
const buff = Buffer.alloc(10);
//用1填充
const buff1 = Buffer.alloc(10, 1);
//不被填充
const buff2 = Buffer.allocUnsafe(10);
//用数组初始化
const buff3 = Buffer.from([1, 2, 3]);
// 创建一个包含 UTF-8 字节 [0x74, 0xc3, 0xa9, 0x73, 0x74] 的 Buffer。
const buf5 = Buffer.from('tést');
console.log(buf5);
//写入缓冲区
// buf.write(string[, offset[, length]][, encoding])
buf = Buffer.alloc(20);
var len = buff.write("他");
console.log(len);
//从缓冲区读取数据
var str = buff.toString();
console.log(str);
//将buffer装换成json
var json = buff.toJSON();
console.log(json);
写入缓冲区
buf.write(string[, offset[, length]][, encoding])
string - 写入缓冲区的字符串。
offset - 缓冲区开始写入的索引值,默认为 0 。
length - 写入的字节数,默认为 buffer.length
encoding - 使用的编码。默认为 ‘utf8’ 。
const buf4 = Buffer.alloc(19);
buf4.write("uhjgfhy");
let str = buf4.toString();
console.log(buf4); //<Buffer 75 68 6a 67 66 68 79 00 00 00 00 00 00 00 00 00 00 00 00>
console.log(str); //uhjgfhy
读取数据
buf.toString([encoding[, start[, end]]])
encoding - 使用的编码。默认为 ‘utf8’ 。
start - 指定开始读取的索引位置,默认为 0。
end - 结束位置,默认为缓冲区的末尾。
const buf4 = Buffer.alloc(19);
buf4.write("uhjgfhy");
let str = buf4.toString();
转化为JSON
buf.toJSON()
const buf = Buffer.from([1, 2, 3]);
let json = buf.toJSON();
console.log(json)//{ type: 'Buffer', data: [ 1, 2, 3 ] }
缓冲区合并
Buffer.concat(list[, totalLength])
list - 用于合并的 Buffer 对象数组列表。
totalLength - 指定合并后Buffer对象的总长度。
var buffer1 = Buffer.from(('1'));
var buffer2 = Buffer.from(('2'));
var buffer3 = Buffer.concat([buffer1, buffer2]);
console.log("buffer3 内容: " + buffer3.toString());//buffer3 内容: 12
缓冲区比较
buf.compare(otherBuffer);
返回一个数字,表示 buf 在 otherBuffer 之前,之后或相同。
拷贝缓冲区
buf.copy(targetBuffer[, targetStart[, sourceStart[, sourceEnd]]])
targetBuffer - 要拷贝的 Buffer 对象。
targetStart - 数字, 可选, 默认: 0
sourceStart - 数字, 可选, 默认: 0
sourceEnd - 数字, 可选, 默认: buffer.length
let buf1 = Buffer.from("abcd");
let buf2 = Buffer.from('efg');
buf2.copy(buf1, 2);//将buf2插入到buf1的第二位置并且buf1 2后面的都没有了
console.log(buf1.toString());//abef
缓冲区裁剪
buf.slice([start[, end]])
start - 数字, 可选, 默认: 0
end - 数字, 可选, 默认: buffer.length
不包含end这个位置的值
let buf1 = Buffer.from("abcd");
let buf2 = buf1.slice(0, 2);//ab
console.log(buf2.toString()); //ab
缓冲区长度
buf.length()