005Buffer(缓冲区)
[A] 基本知识
更多Buffer信息:https://www.runoob.com/nodejs/nodejs-buffer.html
1. Buffer的存在就是来弥补传统的数组的不足(不能存储二进制文件)
2. Buffer的结构和数组很像,操作方法也和数组类似
3. Buffer不需要引入模块,可直接使用
4. Buffer中存储的都是二进制数据,但是在显示的时候都是以16进制显示的
Buffer中的而每一个元素的范围都是从00-ff(16进制,换成十进制为:0-255)的
因为这是一个字节(8位)的范围
计算机中:
8 bit = 1 Byte(字节)
1024 Byte = 1Kb
1024 Kb = 1 Mb
1024 Mb = 1 Gb
1024 Gb = 1Tb
1024 Tb = 1Pb
buffer.length返回的是该buffer在内存中占用的字节长度
在buffer中,一个英文字符占用内存的一个字节
一个中文字占用内存中的三个字节
[B] 将字符串转换成Buffer
示例:
var buf = Buffer.from("hello word")
[C] 创建指定长度的buffer,默认元素为00
var buf1 = Buffer.alloc(10); // 创建一个长度为10的Buffer
【注】Buffer的长度一旦创建就不能再修改
[D] 向Buffer中添加数据,
索引添加值的方法,和数组类似
buf1[0] = 25;
Buffer中的每个元素存储范围都是0-255,超出的范围会根据二进制写法,取出后八位保存
如:
buf1[0] = 556; // 该值已超出可以存储的范围
实际中:
// 10 0010 1100(556) 保存的时候之u能取到8位
即
// 0010 1100(44) 实际保存到的数据为44
[E] Buffer数据访问
下标索引,显示出来的数据为10进制
// buf1实际存储:<Buffer 19 5a ca 7d 00 00 00 00 00 00>
var a = buf1[1];
// 返回结果为:90(即十进制的5a)
[F] buffer中的数据转化成任意进制显示
buffer中数据默认显示为十进制,可通过.toString()自定义显示数据的进制
如:
var a = buf1[1].toString(16);
// 返回5a
var a = buf1[1].toString(2);
// 显示1011010
[G] 创建一个指定长度的Buffer,但是Buffer可能含有敏感数据
var buf1 = Buffer.allocUnsafe(10);
// 返回的值可能包含有数据,并非全是00
[H] Buffer叫做缓冲区
用户向node服务器请求数据,发送的请求是二进制的,这些请求被保存在缓冲区Buffer中,
node服务器将数据发送给用户时,发送的数据也是二进制,也要保存在缓冲区Buffer中。