node.js里的buffer常见操作,copy,concat等实例讲解

//通过长度构建的buffer内容是随机的
var buffer=new Buffer(100);
console.log(buffer);
//手动清空buffer,一般创建buffer不会清空
buffer.fill(0);
//通过字符串创建buffer
//字符串具有不变性

var str="阿尼";
var buffer=new Buffer(str);
console.log(buffer)

// 通过数据创建 ,一般这种方式用的较少
var buffer=new Buffer([0,255]);
console.log(buffer);

//代表的是内存,引用
//数组的slice是浅拷贝
let ary=[1,2,3];
let ary1=[ary,100,200];
let newAry=ary1.slice();
ary[0]=500;
console.log(newAry);
// 深拷贝 ,指的是对象中里面存的对象和以前的对象毫无关系,但长的一样
var obj={a:1};
console.log([obj]===[{a:1}])
// 浅拷贝 ,里面存放的内容和以前的是同一个地址
var obj={a:1};
console.log([obj]===[obj])

var ee=Object.assign({w:1},{a:{a:1}}) //浅拷贝 将两个对象合成一个新的对象
console.log(ee);
//JSON.parse(JSON.stringify({a:{a:1}})); //深拷贝

//buffer存放的都是内存地址,所有slice不会返回一个新的buffer
var buffer=new Buffer([1,2,3]);
var newBuffer=buffer.slice(0,1);
newAry[0]=100;
console.log(buffer);

//
var buf1=new Buffer('音乐');
var buf2=new Buffer('啦啦');
var bigBuffer=new Buffer(12);
//拷贝
buf1.copy(bigBuffer,0);
buf2.copy(bigBuffer,buf1.length);
console.log(bigBuffer.toString()) ;//可以调用toString方法转为字符

//buffer concat
//合并两个buffer
let ww=Buffer.concat([buf1,buf2]).toString();
console.log(ww);
//合并两个buffer
Buffer.myConcat=function (list,totaLength) {
    //totaLength 是否传递,如果传递用传递的长度构建一个buffer
    //如果没有长度。循环list算出总长度,构建一个大buffer
    //循环list将每一个小buffer拷贝到大buffer上
    //如果长度过长,可以截取有效的长度,返回大buffer
    if(typeof totaLength=='undefined'){
        totaLength=list.reduce((per,next)=>{
            return per+next.length;
        },0);
        let buffer=new Buffer(totaLength);
        let index=0;
        list.forEach(item=>{
            item.copy(buffer,index)
            index+=item.length;

        });
        console.log(index);
        return buffer.slice(0,index);
    }
}
console.log(Buffer.myConcat([buf1,buf2]).toString());

 

posted @ 2017-09-12 11:46  八bug哥哥  阅读(2398)  评论(0编辑  收藏  举报