buffer对象学习


  • node中Buffer是一个类数组对象(我们可以像操作数组那样操作buffer),存储二进制,但是在显示时都是以16进制的形式显示(二进制显示的太长了,不方便显示)。

  • 在前端我们用String对象完全足够操作文本,但是在后端不一样,我们需要处理一些大文件,这是二进制的,这就需要Buffer。

  • 数组中不能存储二进制的文件,而buffer就是专门用来存储二进制数据

  • 在js基本数据类型不可变,要更改必须新建,但是buffer可以直接操作源文件。

  • 使用buffer不需要引入模块,直接使用即可

1. 常用Buffer方法:

创建一个buffer

/**
 * @param {Number} size 长度 必选
 * @param {String} fill 填充到缓冲区的值 可选
 * @param {String} encoding fill的编码格式,如果fill的值是一个字符串,默认值为utf-8 可选
 * @return {Buffer}
 * */
Buffer.alloc(size,fill,encoding);

//例1:
const buffer = Buffer.alloc(5);
console.log(buffer)//<Buffer 00 00 00 00 00> 因为没有fill任何值

//例2:
buffer.write("hello"); //...略,如果超出5字节将被忽略

/**
 * @param {Number} encoding  转换成字符串后的字符编码,默认为 ‘utf8′
 * @param {String} start     buffer 转换的起始位置,默认为 0
 * @param {String} end       buffer 转换的结束位置,默认为buffer长度
 * @return {Stirng}
 * */
console.log(buffer.toString());//转成字符串

(2) Buffer.from

将一个字符串转为buffer,这个方法接收

/**
 * @param {String} string 字符串 必选
 * @param {String} encoding 编码格式 可选,默认utf8 
 * @return {Buffer}
 * */
Buffer.from(string,encoding)

//例:
const buffer = Buffer.from("hello");

2. 类数组对象

buffer是一个类数组对象

console.log(buffer.length); //长度
console.log(buffer[0]); //获取
buffer[0]=72; //赋值
console.log(buffer.toString()) //Hello 因为72对应Unicode码点 H

遍历

for(let item of buffer){
    console.log(item);
}

slice

const a = buffer.slice(0,1);//会生成一个新的buffer对象
console.log(a.toString)

3. 应用

buffer在node中的应用非常广泛,比如,我们使用 fs模块读取文件的时候

fs.readFile("./a.txt","utf-8",(err,data)=>{
    if(err)return
    console.log(data)
})

4. 总结

Buffer就是一个用来存储视频、音频、大文件等的二进制类数组对象。


文章作者: iamfugui
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 iamfugui !
评论