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());

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM