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就是一个用来存储视频、音频、大文件等的二进制类数组对象。