Buffer
概念
在Node.js中,Buffer是一个非常重要的内置全局对象,Node.js是基于Chrome V8引擎构建的,V8引擎本身不支持处理二进制数据,因此Node.js引入Buffer来弥补这一不足,Buffer中文译为【缓冲区】,是一个类似于Array的对象
,用于表示固定长度的字节序列,换句话讲,Buffer就是一段固定长度的内存空间,用于处理二进制数据
。
特点
- Buffer大小固定且无法调整
- Buffer性能较好,可以直接对计算机内存进行操作
- 每个元素的大小为1字节(byte)
作用
- 文件系统操作:读写文件时,文件内容通常以二进制形式存储和传输。
- 网络通信:在进行TCP/UDP等网络通信时,数据也是以二进制的形式发送和接收。
- 加密解密:加密算法处理的数据通常是二进制格式。
- 图片、音频、视频处理:这些多媒体文件的内容是二进制数据。
使用
// 1. alloc
let buf = Buffer.alloc(10); // Buffer是Node的内置模块
// alloc创建的Buffer,每个二进制位都会归零
console.log(buf) // 输出 <Buffer 00 00 00 00 00 00 00 00 00 00>
// 2. allocUnsafe
let buf_2 = Buffer.allocUnsafe(10);
console.log(buf_2) // <Buffer 00 00 00 00 00 00 00 00 00 00>
allocUnsafe
allocUnsafe创建的Buffer可能包含旧的内存数据,内存空间其实是可以复用的,所以allocUnsafe的执行速度更快。
以下做一段图示:
A程序执行时,申请了一段内存空间,并且执行完毕,这段内存空间就处于空闲状态。
B程序在执行时,就可以再次使用这段内存空间。alloc创建Buffer时,会对这段内存中每个二进制位都清零,allocUnsafe并不会对旧数据清零。
// 3. from
let buf_3 = Buffer.from('hi');
// h 68 i 69就是unicode编码中的数字,转成二进制存在Buffer中
// 68是16进制的表示方式
console.log(buf_3) // <Buffer 68 69>
H在ASCII码表(兼容unicode码表)中是104
使用from创建Buffer,还可以传入数组。
// from
let buf_4 = Buffer.from([0x48, 0x65, 0x6c, 0x6c, 0x6f]);
console.log(buf_4) // <Buffer 48 65 6c 6c 6f>
console.log(buf_4.toString('utf8')) // Hello