Node.js学习笔记(四)—— Buffer缓冲区

一、Buffer(缓冲区)

  • Buffer的结构和数组很像,操作的方法也和数组类似
  • JS数组中不能存储二进制的文件,而buffer就是专门用来存储二进制数据
  • 使用buffer不需要引入模块,直接使用即可
  • 在buffer中存储的都是二进制数据,但是在显示时都是以16进制的形式显示
    • buffer中每一个元素的范围是从
      00 - ff(16进制描述)
      0 - 255(10进制描述)
      00000000 - 11111111(2进制描述)
  • Buffer的大小一旦确定,则不能修改,Buffer实际上是对底层内存的直接操作

二、Buffer的基本使用介绍

2.1 将一个字符串转换为buffer

var str = "Hello Buffer";
//将一个字符串保存到buffer中
var buf = Buffer.from(str);

console.log(buf.length); //占用内存的大小
console.log(str.length); //字符串的长度
console.log(buf);

输出:
12
12
<Buffer 48 65 6c 6c 6f 20 42 75 66 66 65 72>

var str = "Hello 缓冲区";
//将一个字符串保存到buffer中
var buf = Buffer.from(str);

console.log(buf.length); //占用内存的大小
console.log(str.length); //字符串的长度
console.log(buf);

输出:
15
9
<Buffer 48 65 6c 6c 6f 20 e7 bc 93 e5 86 b2 e5 8c ba>

注意: 对于英文字母来说,一个字母就是一个字节;但是对于中文来说,三个字节表示一个汉字,所以“Hello 缓冲区”这个字符串的长度是9,但是占用内存的大小是15。

2.2 创建一个指定大小的Buffer

//创建一个指定大小的buffer
var buf2 = new Buffer(10);//10个字节的buffer
console.log(buf2.length);
console.log(buf2);

输出:
10
<Buffer 00 00 00 00 00 00 00 00 00 00>

但其实这种buffer的构造函数都是不推荐使用的,官网都会标识为弃用。在这里插入图片描述
推荐使用下面这种Buffer的类方法。

//创建一个10个字节的buffer
var buf3 = Buffer.alloc(10);
//通过索引,来操作buf中的元素
buf3[0] = 88;
buf3[1] = 255;
buf3[2] = 0xaa;
buf3[3] = 255;
buf3[4] = 556;   //刚刚提到,buffer的范围是0-255,那么超出这个范围就会溢出,比如556,换成2进制是1000101100,那么就会舍掉前两位变成00101100
buf3[10] = 15;   //如果是数组,哪怕没有10这个索引,越界了,也会往后加上,但是buffer不会,不会有变化
console.log(buf3);

输出
10
<Buffer 58 ff aa ff 2c 00 00 00 00 00>

2.2.1读取buffer中的内容

// 只要数字在控制台或页面中输出一定是10进制
console.log(buf3[2]);
console.log(buf3[2].toString(16));  //把它转成16进制的字符串

输出:
170
aa

遍历buffer并输出

for(var i=0 ; i<buf3.length ; i++){
    
    
	console.log(buf3[i]);
}

输出:
88
255
170
255
44
0
0
0
0
0

2.3 Buffer.alloUnsafe(size)

//Buffer.allocUnsafe(size) 创建一个指定大小的buffer,但是buffer中可能含有敏感数据
var buf4 = Buffer.allocUnsafe(10);
console.log(buf4);

输出:
<Buffer c0 1f f6 50 0b 02 00 00 d8 1f>

从输出结果来看,这样创建出来的buffer并不像Buffer.alloc(size)那样创建出来全是0的已清空内存的数据,而是不全为零的,可能会含有敏感数据,所以不经常被使用。

二、总结

  • Buffer.from(str) 将一个字符串转换为buffer
  • Buffer.alloc(size) 创建一个指定大小的Buffer
  • Buffer.alloUnsafe(size) 创建一个指定大小的Buffer,但是可能包含敏感数据
  • buf.toString() 将缓冲区中的数据转换为字符串

Node中Buffer的文档:http://nodejs.cn/api/buffer.html

猜你喜欢

转载自blog.csdn.net/qq_32755875/article/details/109581712