node中buffer学习;二进制,字节,位的概念
buffer:nodejs中存放二进制数据文件的数组 因为在数据传输中,服务器可能会给我们返回图片,视频等等无法用普通数组储存的数据格式。这时候我们就要将这个格式文件转化成二进制,存储到buffer中。
// 语法
var a = 'hello slc';
var b = Buffer.from(a);// 保存到Buffer
console.log(a.length);// 9 表示a字符串长度13个
console.log(b.length);// 9 表示内存占用13位
console.log(b);// 输出十六进制的数。因为二进制太长了,从而转化成十六进制显示;对应Unicode表
var c = 'hello 聪明的土地';
var d = Buffer.from(c);// 保存到Buffer
console.log(a.length);// 11 表示a字符串长度13个
console.log(b.length);// 21 表示内存占用21位;中文占用三个字节;
- 计算机中,八位等于一个字节,字节是最小单位;所以一个阿拉伯数字,占用八位 == 一个字节;
- 1024字节(byte) == 1kb ; 1024kb == 1mb;;;;
buffer是对底层内存的直接操作(连续空间),一旦确定长度,无法修改
const buf = Buffer.alloc(5);
console.log(buf);
// 打印: <Buffer 00 00 00 00 00>
buf[0] = 1;buf[1] = 255;buf[2] = 0xaa;buf[10] = ff;(无效。因为一旦确定长度,无法修改)
console.log(buf);
// 打印: <Buffer 01 ff aa 00 00>
buffer最小只能保存八位;00-ff即00000000-11111111即0-255 所以
const buf = Buffer.alloc(1);
console.log(buf);
// 打印: <Buffer 00>
buf[0] = 556;(超过数字255)
console.log(buf);
// 打印: <Buffer 2c>
// 因为556的二进制为1000101100
这时候截取后八位为 00101100
00101100转出16进制=2c