一、初识 Buffer
- 除了模块之外,Node 还弥补了语言另外一个不足之处,那就是对二进制数据的处理。
- buffer 是一个表示固定内存分配的全局变量(也就是说,要放到缓冲区中的字节数需要提前定下),它就好比是一个八位字节元素组成的数组,可以有效地在 JavaScript 中表示二进制数据。
- 实际上 Buffer 中的内存不是通过 JavaScript 分配的,而是在底层通过 C++ 申请的。
- 我们在使用 buffer 时,不需要引入模块,直接使用即可。
- 在 buffer 中存储的都是二进制数据,但是在显示时,都是以 16 进制的形式显示。
二、创建 Buffer 类
Buffer.alloc(size[, fill[, encoding]])
: 返回一个指定大小的 Buffer 实例,如果没有设置 fill,则默认填满 0Buffer.allocUnsafe(size)
: 返回一个指定大小的 Buffer 实例,但是它不会被初始化,所以它可能包含敏感的数据Buffer.from(array)
: 返回一个被 array 的值初始化的新的 Buffer 实例(传入的 array 的元素只能是数字,不然就会自动被 0 覆盖)Buffer.from(arrayBuffer[, byteOffset[, length]])
: 返回一个新建的与给定的 ArrayBuffer 共享同一内存的 Buffer。Buffer.from(buffer)
: 复制传入的 Buffer 实例的数据,并返回一个新的 Buffer 实例Buffer.from(string[, encoding])
: 返回一个被 string 的值初始化的新的 Buffer 实例
三、Buffer 的操作
- 使用 Buffer 保存字符串
let str = "Hello JavaScript";
let buf = Buffer.from(str , "utf-8");
- 创建指定大小的 Buffer 对象
let buf3 = Buffer.alloc(1024*8)
四、Buffer 的转换
- Buffer 与字符串间的转换
支持的编码:ASCII、UTF-8、UTF-16LE/UCS-2、Base64、 Binary、Hex
- 字符串转 Buffer
Buffer.from(str , [encoding]);
- Buffer 转字符串
buf.toString([encoding] , [start] , [end]);
五、写入操作
- 向缓冲区中写入字符串
buf.write(string[, offset[, length]][, encoding])
- 替换指定索引位置的数据
buf[index]
- 将指定值填入到缓冲区的指定位置
buf.fill(value[, offset[, end]][, encoding])
六、读取操作
- 将缓冲区中的内容,转换为一个字符串返回
buf.toString([encoding[, start[, end]]])
- 读取缓冲区指定索引的内容
buf[index]
- 读取 Node 缓冲区长度
buf.lenght
七、其他操作
- 复制缓冲区
buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])
- 对缓冲区切片
buf.slice([start[, end]])
- 拼接缓冲区
Buffer.concat(list[, totalLength])
八、Buffer 补充
Buffer.isEncoding('utf-8'); // 返回 Boolean,是否支持该编码格式
Buffer.byteLenght() // 计算字节长度(一个汉字即3个字节)