1、Buffer
1)定义
Node中,应用需要处理网络协议、操作数据库、处理图片、接收上传文件等,在网络流和文件的操作中,还要处理大量二进制数据,JavaScript自有的字符串远远不能满足这些需求,于是Buffer对象应运而生。
Buffer作为存在于全局对象上,无需引入模块即可使用,你绝对不可以忽略它。
可以理解Buffer是在内存中开辟的一片区域,用于存放二进制数据。Buffer所开辟的是堆外内存,不是由v8分配的,而是在Node的C++层面实现内存的申请的,最终是存在硬盘里面。
node采用slab分配机制,slab是一种动态内存管理机制
Buffer 对象占用的内存空间是不计算在 Node.js 进程内存空间限制上的,所以可以用来存储大对象,但是对象的大小还是有限制的。一般情况下32位系统大约是1G,64位系统大约是2G。
2)buffer的使用
Buffer 实例一般用于表示编码字符的序列,比如 UTF-8 、 UCS2 、 Base64 、或十六进制编码的数据。 通过使用显式的字符编码,就可以在 Buffer 实例与普通的 JavaScript 字符串之间进行相互转换。
const buf = Buffer.from(‘runoob’, ‘ascii’);
console.log(buf.toString(‘hex’)); // 输出 72756e6f6f62
console.log(buf.toString(‘base64’)); // 输出 cnVub29i
创建buffer类
const buf1 = Buffer.alloc(10); // 创建一个长度为 10、且用 0 填充的 Buffer。
const buf5 = Buffer.from(‘tést’); // 创建一个包含 UTF-8 字节 [0x74, 0xc3, 0xa9, 0x73, 0x74] 的 Buffer。
buf = Buffer.alloc(256); //写入缓冲区
len = buf.write(“www.runoob.com”);
buf = Buffer.alloc(26); //从缓冲区读取数据
for (var i = 0 ; i < 26 ; i++) {
buf[i] = i + 97;
}
console.log( buf.toString(‘a