1.buffer常用方法
// nodejs的中文是三个字节
let buf = Buffer.from("珠峰"); // 参数是string 建立内存空间
let buf1 = buf.slice(0, 3); // 截取内存
console.log(buf1); // <Buffer e7 8f a0>
console.log(buf1.toString()); // 珠
buf1[0] = 100; // 这里修改了第一个字节
console.log(buf1); // <Buffer 64 8f a0>
console.log(Buffer.isBuffer(buf1)); //判断是否是buffer true就是buffer
console.log(buf.length); // 6 nodejs中的buffer表示的是内存,所以length也是字节长度
let buffer1 = Buffer.from("珠峰");
let buffer2 = Buffer.from("架构");
let buff = Buffer.alloc(buffer1.length + buffer2.length); //开辟一个内存buffer 制定字节长度
// 复制copy 参数说明:
// 目标(buff)/目标(buff)的填入位置/复制目标(buffer2)的个数[初始和结束位置] (这个不填,默认0到复制目标的length)
buffer1.copy(buff, 6);
buffer2.copy(buff, 0, 0, 6);
console.log(buff.toString()); // 架构珠峰
2.copy方法的实现
Buffer.prototype.copy = (target, targetStart, sourceStart, sourceEnd) => {
console.log("自定义 copy");
for (let i = sourceStart; i < sourceEnd; i++) {
target[i + targetStart] = this[i];
}
};
buffer1.copy(buff, 0, 3, 6);
console.log(buff.toString()); // 自定义 copy 架珠峰
3.buffer的连接
let b1 = Buffer.from("中国");
let b2 = Buffer.from("666");
let tg = Buffer.concat([b1, b2], 7); //buffer的连接,替代上面的copy,这个方法常用 参数说明:合并的buffer数组/获取的长度
console.log(tg.toString()); // 中国6
4.buffer的分离
// 分割buffer split方法 自定义
Buffer.prototype.split = function (sep) {
let len = Buffer.from(sep).length; // 分离符的长度[内存的长度]
let offset = 0; // 截取的偏移量
let currentIndex = 0; // 分离符的位置index
let arr = [];
while (-1 !== (currentIndex = this.indexOf(sep, offset))) {
arr.push(this.slice(offset, currentIndex)); // 截取
offset = currentIndex + len;
}
// 分离符是最后一个的情况
if (offset === this.length) {
console.log("到底了");
} else {
arr.push(this.slice(offset));
}
return arr;
};
console.log(Buffer.from("中国爱长城好啊爱情的爱意爱").split("爱").toString()); // 中国,长城好啊,情的,意