node.js中buffer的理解

//一个 Buffer 是一段内存,比如大小为 2(Byte)的buffer,一共有 16 bit ,比如是 00000001 00100011 ,可是这样显示太不方便。所以显示这段内存的数据的时候,用其对应的 16 进制就比较方便了,是 01 23,之所以用 16 进制是因为转换比较方便。

const buf = Buffer.alloc(3);
buf[0] = 22;
//超过255把高位去掉
console.log(buf);
//结果<Buffer 16 00 00>

const buf1 = Buffer.alloc(3,'a','base64');
console.log(buf1);
//结果<Buffer 98 6b da>

const buf2 = Buffer.alloc(9,'你是猪','utf8');//utf8默认编码
console.log(buf2);
//结果<Buffer e4 bd a0 e6 98 af e7 8c aa> 一个中文字占三个字节

const buf3 = Buffer.allocUnsafe(3,'a');
//结果为随机的三位,可能有敏感数据,可以调用buf3.fill
buf3.fill(4);
console.log(buf3);
//结果<Buffer 04 04 04>

var bufC = Buffer.concat([buf,buf2]);
console.log(bufC);
//<Buffer 00 00 00 e4 bd a0 e6 98 af e7 8c aa>

var bufC1 = Buffer.concat([buf,buf2],5);
console.log(bufC1);
//<Buffer 00 00 00 e4 bd>

var bufArr = Buffer.from([0xe4,0xbd,0xa0, 0xe6 ,0x98, 0xaf ,0xe7 ,0x8c,0xaa]);
console.log(bufArr); //<Buffer e4 bd a0 e6 98 af e7 8c aa>
console.log(bufArr.toString()); //你是猪

var bufArr1 = Buffer.from('123');
console.log(bufArr1); //<Buffer 31 32 33>

var bufArr2 = Buffer.from([1,2,'2']);
console.log(bufArr2); //<Buffer 01 02 02>

//拷贝buffer
const bufx1 = Buffer.from('buffer');
const bufx2 = Buffer.from(bufx1);
bufx1[0] = 0x61;
console.log(bufx1.toString());
// 输出: auffer
console.log(bufx2.toString());
// 输出: buffer


//拷贝buffer
const bufxy1 = Buffer.from('buffer','ascii');
console.log(bufxy1.toString('utf8')); //buffer

//判断是否为Buffer
console.log(Buffer.isBuffer(bufxy1));  //true

//表示node是否支持这种字符编码
console.log(Buffer.isEncoding('utf8'));  //true

console.log('peng'.charCodeAt(2)); //110
console.log('peng'.charAt(2)); //n

//创建16个字节大小的Buffer
var arrbuf = new ArrayBuffer(16);
console.log(arrbuf);
console.log(Buffer.from(arrbuf)); //<Buffer 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00>
console.log(Buffer.from(arrbuf).buffer.byteLength); //内存大小

//copy指定buff的长度
var allocbuf = Buffer.alloc(26);
var allocbuf1 = Buffer.alloc(26,'!');
console.log(allocbuf.buffer); //内存26个字节,alloc方法可以直接写内存大小 from不可以.
for(var i=0;i<26;i++){
    allocbuf[i] = i+65;
}
console.log(allocbuf.toString()); //ABCDEFGHIJKLMNOPQRSTUVWXYZ
allocbuf.copy(allocbuf1,3,6,13); //从allocbuf复制到allocbuf1中,从allocbuf1中的3位置开始,把allocbuf中6到13位置的东西复制到allocbuf1中
console.log(allocbuf1.toString()); //!!!GHIJKLM!!!!!!!!!!!!!!!!

//一个Buffer.from直接分配8192个字节的内存


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值