Nodejs—buffer入门(图文)

Nodejs—buffer入门

概念:
buffer就是缓冲区,用来存储数据的容器,操作和数组很相似
buffer不需要引入可以直接使用

创建buffer对象的三种方式

  • 第一种:alloc,会重置buffer对象
    第一个参数是长度,第二个参数是设置的初始化buffer的默认值,16进制
const buf1 = Buffer.alloc(10, 16);
console.log(buf1);

结果:
在这里插入图片描述

  • 第二种:allocUnsafe:不会重置buffer对象,可能包含没有清理掉的旧值,不安全
const buf3 = Buffer.allocUnsafe(10);
console.log(buf3);

结果:每次都会有不同的旧值
在这里插入图片描述
重置buffer

const buf3 = Buffer.allocUnsafe(10);
buf3.fill(); // 对buffer对象进行重置
console.log(buf3);

结果:
在这里插入图片描述

  • 第三种:from,可以根据数据长度,动态分配buffer长度
const  buf4 = Buffer.from([1, 2, 3, 4]);
console.log(buf4);
const  buf5 = Buffer.from('test');
console.log(buf5);

结果:
在这里插入图片描述

buffer的读写与转换操作

  • toString()
const buf = new Buffer.alloc(12); // 长度为12
buf.write('读写操作');
console.log(buf.toString()); // 读取,转换成字符串

结果:写入的字符每个占3个buffer长度,因此初始buffer对象的时候设置的长度为12.写入四个字符正好占12位,所以正好显示完全
在这里插入图片描述
如果减少初始buffer对象的长度

const buf = new Buffer.alloc(9); // 长度为9
buf.write('读写操作');
console.log(buf.toString()); // 读取,转换成字符串

结果:结果只出现三个字
在这里插入图片描述
如果初始设置的buffer对象长度并不是3的倍数

const buf = new Buffer.alloc(10); // 长度为10
buf.write('读写操作');
console.log(buf.toString()); // 读取,转换成字符串

结果:最后一个字依旧无法显示,但会出现一个空格
在这里插入图片描述
如果初始设置的buffer对象长度比写入字符的长度要大

const buf = new Buffer.alloc(15); // 长度为15
buf.write('读写操作');
console.log(buf.toString()); // 读取,转换成字符串

结果:会出现空格
在这里插入图片描述
这个时候使用from方法就会很方便,因为from方法可以动态分配buffer长度

const  buf1 = new Buffer.from('读写操作');
console.log(buf1.toString());

结果:不需要给初始buffer设置长度,而造成过短或过长而出现不完整或空格的现象,直接会动态分配
在这里插入图片描述

  • toJSON()
const buf = new Buffer.from([1, 2, 3, 4]);
console.log(buf.toJSON());
console.log(JSON.stringify(buf));  

结果: 两种书写方式输出结果一样
在这里插入图片描述

buffer常用api 操作和数组很相似

  • 合并:类方法
const buf1 = new Buffer.from('test');
const buf2 = new Buffer.from('Nodejs');
const buf3 = Buffer.concat([buf1, buf2]); // 注意是数组
console.log(buf3.toString()); 

结果:
在这里插入图片描述

  • 比较: 实例方法
const buf1 = new Buffer.from('abc');
const buf2 = new Buffer.from('abc');
console.log(buf1.compare(buf2));

结果:
在这里插入图片描述

const buf1 = new Buffer.from('abc');
const buf2 = new Buffer.from('abcdef');
console.log(buf1.compare(buf2));

结果:
在这里插入图片描述

const buf1 = new Buffer.from('abcdef');
const buf2 = new Buffer.from('abc');
console.log(buf1.compare(buf2));

结果:
在这里插入图片描述
因此:比较只有三种结果
// 0代表相等,
// 1,调用方法的Buffer对象长度大于另一个Buffer对象,
// -1,调用方法的Buffer对象长度小于另一个Buffer对象

  • 拷贝:实例方法
const buf1 = new Buffer.from('abcaa');
const buf2 = new Buffer.from('edf');
buf2.copy(buf1)
console.log(buf1.toString());

结果:把buf2的值拷贝给了buf1,buf2只有三位
在这里插入图片描述

  • 截取:实例方法
const buf1 = new Buffer.from('abcd');
console.log(buf1.slice(0, 2).toString());

结果:
// 第一个参数:截取的起始位置
// 第二个参数:代表结束的位置,在这个位置之前的被截取
在这里插入图片描述

  • 长度:属性
const buf1 = new Buffer.from('abcd');
console.log(buf1.length);

结果:
在这里插入图片描述
也可以测试中文长度

const buf1 = new Buffer.from('测试')
console.log(buf1.length); 

结果:
在这里插入图片描述

发布了157 篇原创文章 · 获赞 15 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Poppy_LYT/article/details/100130435