从数据结构看,buffer类似一个数组,元素是16进制的两位数
每个元素占内存中的1个byte,1byte=8bit
计算机中,一个0或1,表示一个bit位
0000 0000~1111 1111
对应十进制0~255
,对应16进制00~FF
buffer是node的底层模块,不需引入,直接使用
buffer中存的是二进制数据,打印显示是以16进制的;
字节byte是传输数据的最小单位
创建buffer
- Buffer.from(str) 将一个字符串转换为buffer ,同时创建
var str = 'hello xqw';
var buf = Buffer.from(str);//将一个字符串保存到buffer中,并且创建buffer对象
console.log(buf);
console.log(buf.toString());//将十六进制转为字符串
console.log(buf.length);//占用内存9byte
console.log(str.length);//字符串的长度,英文下1字母占1字节,1中文占3字节
- Buffer.alloc(size) 创建一个指定大小的buffer(推荐)
var buf2 = Buffer.alloc(10) 向内存申请10byte的空间,大小固定;
console.log(buf2) <Buffer 00 00 00 00 00 00 00 00 00 00>
通过索引,来操作buf中的元素
buf2[0] = 88;
buf2[1] = 255;
buf2[2] = 0xaa; 十六进制,以0x开头
buffer的大小一旦确定,是不能修改的,buffer实际上是对底层内存的直接操作
比如上面的buf2, buf2[10] = 15 这样是添加不进去的, 这和数组是不一样
buf2[3] = 256; // 1 0000 0000 前面的1超出了
buf2[4] = 556; // 10 0010 1100 前面的10超出了
读取buffer值 console.log(buf2[2]); 170 只要数字在控制台或页面中输出,默认一定是10进制
输出的是其它进制呢?
buf2[2].toString(16) 输出16进制
buf2[2].toString(2) 输出2进制
- Buffer.allocUnsage(size) 创建一个指定大小的buffer,但是可能包含敏感数据
alloc创建后,会清除原数据,所以显示是00 但是allocUnsage创建后,不会清除原数据,不安全,但是创建的速度更快
遍历buffer
for (var i=0; i < buf2.length; i++) {
console.log(buf2[i]);
}