node.js之buffer

115 阅读2分钟

Buffer 是一个类似于数组的对象,用于表示固定长度的字节序列。Buffer本质是一段内存空间,专门用来处理二进制数据。

2314.png

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);

2315.png

<2> Buffer.allocUnsafe() 【不清空内存,直接开辟6个字节的buffer】

// 创建了一个长度为 n 字节的Buffer,相当于申请了 n 字节的内存空间,且每个字节的值初始化为0

var buffer = Buffer.allocUnsafe(6);
console.log(buffer);
console.log(buffer.length);

2315.png

<3> Buffer.from()

// Buffer.from()方法接收一个数组or字符串作为参数,可以把数组or字符串转换为buffer形式

3.1> 字符串

var buffer = Buffer.from('yhx');
console.log(buffer);

2316.png

var buffer = Buffer.from('严浩翔');
console.log(buffer);

2317.png

注意:

  • 因为是 utf-8 的编码格式,所以一个汉字字符,需要3个字节来表示,所以上面的 '严浩翔' 转换完后是用 12 个字节来表示!!!

3.2> 数组

var buffer = Buffer.from([16,255,256,257,'yhx','y']);
console.log(buffer);

2318.png

注意:

  • 只能对数组中的number类型的元素进行转换,非number类型的元素 ,eg:字符(串)类型的转为 00。

  • 且 number 类型的只能对 <255 的数字进行转换 【因为Buffer中的一个元素是8字节,而8字节最多能大能存的数字为255 ,而大于255的,采取舍弃高位数字的方法,把超过 8 位上的数字舍去,然后再进行转换!!!