nodejs的Buffer

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()); // 中国,长城好啊,情的,意

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值