基本概念
Buffer是Node挂载到global上的一个类。也就是内存,一个汉字在utf8编码下是三个字节。Buffer的变现形式是16进制。
创建Buffer的几种方式
- Buffer.alloc () (传递长度,每一项都填成空位)
let buf = Buffer.alloc(6);
console.log(buf)
- Buffer.allocUnsafe() // 超越总长度就无法拷贝了
- Buffer.from() (可传递数组、字符串)
let buf = Buffer.from('123131')
let buf = Buffer.from([12,23,24])
Buffer的方法
- Buffer.isBuffer()
- buffer.slice() (截取出来的并不是新的内存,而是拿到的截出来的内存)
let buf = Buffer.from([1,2,3])
let newBuffer = buf.slice(0,1);
newBuffer[0] = 10;
console.log(buf) // <Buffer 0a 02 03>
- buffer.copy()
Buffer.prototype.copy = function(targetBuffer,targetStart,sourceStart = 0,sourceEnd = this.length){
for(let i = 0;i<sourceEnd - sourceStart;i++){
targetBuffer[targetStart + i] = this[sourceStart + i]
}
}
- Buffer.concat()
Buffer.concat = function(list,totalLength = list.reduce((a,b)=>a+b.length,0)){
let buf = Buffer.alloc(totalLength);
let offset = 0;
list.forEach((b)=>{
b.copy(buf,offset)
offset += b.length;
})
return buf;
}
- buffer.split()
Buffer.prototype.split = function(seq){
let arr = [];
let offset = 0;
let current;
let len = Buffer.from(seq).length;
while(-1 !=(current = this.indexOf(seq,offset))){
arr.push(this.slice(offset,current));
offset = current + len;
}
arr.push(this.slice(offset))
return arr;
}