Buffer是一个类似于数组的对象,用于表示固定长度的字节序列。Buffer本质是一段内存空间,专门用来处理二进制数据。
js没有二进制数据类型,但我们又必须要处理二进制数据,所以,Node.js类型提供了一个Buffer对象来提供对二进制数据的操作。【实质上,是把数据从二进制转换成了十六进制】
- Buffer 是十六进制
- Buffer 中每个元素的大小为1字节(1字节等于8个比特位)
- 所以要用两个单位的十六进制来表示Buffer中的一个元素!!
一. Buffer 的创建
<1> Buffer.alloc() 【先清空内存,再开辟6个字节的buffer】
// 创建了一个长度为 n 字节的Buffer,相当于申请了 n 字节的内存空间,且每个字节的值初始化为0
var buffer = Buffer.alloc(6);
console.log(buffer);
console.log(buffer.length);
<2> Buffer.allocUnsafe() 【不清空内存,直接开辟6个字节的buffer】
// 创建了一个长度为 n 字节的Buffer,相当于申请了 n 字节的内存空间,且每个字节的值初始化为0
var buffer = Buffer.allocUnsafe(6);
console.log(buffer);
console.log(buffer.length);
<3> Buffer.from()
// Buffer.from()方法接收一个数组or字符串作为参数,可以把数组or字符串转换为buffer形式
3.1> 字符串
var buffer = Buffer.from('yhx');
console.log(buffer);
var buffer = Buffer.from('严浩翔');
console.log(buffer);
注意:
- 因为是 utf-8 的编码格式,所以一个汉字字符,需要3个字节来表示,所以上面的 '严浩翔' 转换完后是用 12 个字节来表示!!!
3.2> 数组
var buffer = Buffer.from([16,255,256,257,'yhx','y']);
console.log(buffer);
注意:
-
只能对数组中的number类型的元素进行转换,非number类型的元素 ,eg:字符(串)类型的转为 00。
-
且 number 类型的只能对 <255 的数字进行转换 【因为Buffer中的一个元素是8字节,而8字节最多能大能存的数字为255 ,而大于255的,采取
舍弃高位数字的方法,把超过 8 位上的数字舍去,然后再进行转换!!!