Buffer(缓冲区)
一、Buffer?
JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。
但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。
在 Node.js 中,Buffer 类是随 Node 内核一起发布的核心库。Buffer 库为 Node.js 带来了一种存储原始数据的方法,可以让 Node.js 处理二进制数据,每当需要在 Node.js 中处理I/O操作中移动的数据时,就有可能使用 Buffer 库。原始数据存储在 Buffer 类的实例中。一个 Buffer 类似于一个整数数组,但它对应于 V8 堆内存之外的一块原始内存。
二、Buffer特点?
1.Buffer的结构和数组很像,操作的方法也和数组类似
2. 数组中不能存储二进制的文件,而buffer就是用来存储二进制文件的
3.使用Buffer不需要引用模块,直接使用即可
4.Buffer中存储的数据都是二进制数据,但显示的时候是十六进制,控制台输出时是十进制
- Buffer中的每一个元素的范围都是从00-ff,即0-255,00000000-11111111
- 当元素范围超出时,会将其二进制前面位数相应舍去
- 计算机中,一个0或一个1,我们称为一个位(bit)
- 8bit=1byte(字节)
- 1024byte=1kb...
- Buffer中一个英文占用一个字节,一个汉字占用三个字节
- 可以用for循环遍历,以十进制数输出
5 .Buffer大小一旦确定不能修改,Buffer实际上是对底层内存的直接操作
三、使用buffer?
1.将一个字符串保存到Buffer中
const str="hello";
var buffer=Buffer.from(str);
console.log(buffer);
运行结果:
<Buffer 68 65 6c 6c 6f> //显示结果为十六进制
2.长度
const str="hello 你好";
var buffer=Buffer.from(str);
console.log(buffer);
console.log(buffer.length); //占用内存的大小
console.log(str.length); //字符串的长度
运行结果:
<Buffer 68 65 6c 6c 6f 20 e4 bd a0 e5 a5 bd>
12
8
3.创建指定大小的Buffer
//创建十个字节的Buffer
var buffer1=Buffer.alloc(10);
var buffer2=Buffer.allocUnsafe(10);//相较Buffer.alloc()不安全,可能含有敏感数据,
buffer1[0]=66;
buffer1[1]=30;
buffer1[2]=0xaa;
console.log(buffer1);
console.log(buffer1[2]);
console.log(buffer1[2].toString(16)); //number类型的tostring()里面传参数可以转化为几进制
运行结果:
<Buffer 42 1e aa 00 00 00 00 00 00 00>
170 //输出结果为十进制
aa
4.将缓冲区里面的数据转换为字符串
var buffer3=Buffer.from("我是一段数据").toString();
console.log(buffer3);
运行结果:
我是一段数据