(四)Buffer 缓冲区

(一)Buffer (缓冲区)

1. Buffer 的结构和数组很像,操作的方法也和数组类似

为什么有数组了还要新发明一个Buffer呢?

(1)数组是js语法,js代码性能较差

(2)数组中可以存的数据类型有限,传统的数组不能满足服务端所需的数据类型的需求,比如音频、视频、图片等二进制文件,而Buffer就是专门用来存储二进制文件的

(3) 使用Buffer不需要引入模块,直接用即可

(二)代码演示

1. 将一个字符串保存在Buffer

Buffer.from 语法

var str = 'test'
var buf = Buffer.from(str)
console.log(buf) // <Buffer 74 65 73 74>
console.log(buf.length) // 4

根据结果可以看出

// 74 -> t
// 65 -> e
// 73 -> s
<Buffer 74 65 73 74>
// 一个映射

在 Buffer 中存储的都是二进制(数据在传输中二进制传输)~但是在显示时都是以16进制去显示

2. buffer中每一个元素的范围是从 00000000 --- ffffffff 

计算机中一个0或者1个1,我们成为1位(bit)

8bit = 1byte (字节)  8位等于一个字节

buffer 中的一个元素,占用一个字节,字节是计算机传输中的最小单位

所以 test 占用 4 个字节

3. 1024byte = 1 KB

1024KB = 1 mb

1024mb = 1gb

1024ng = 1tb

4. buffer.length 表示占用内存的大小

var str = '我是周芳冰'
var buf = Buffer.from(str)
console.log(buf)
console.log(buf.length)

// 结果
<Buffer e6 88 91 e6 98 af e5 91 a8 e8 8a b3 e5 86 b0>
15

一个汉字占用 3 个字节!!一个英文占用一个字节

5. 创建一个制定大小的Buffer

Buffer.alloc

var buffer = Buffer.alloc(10)
console.log(buffer.length) // 10
console.log(buffer) // <Buffer 00 00 00 00 00 00 00 00 00 00>
// 赋值
buffer[0] = 88
buffer[1] = 255
console.log(buffer) // <Buffer 58 ff 00 00 00 00 00 00 00 00>

赋值会转成16进制

注意:Buffer 的内存如果一旦确定,不可以更改

buffer[11] = 12
console.log(buffer) // <Buffer 58 ff 00 00 00 00 00 00 00 00>

一共10内存,索引到9,索引11赋值,不能赋值成功

6. Buffer的大小一旦确定,则不能够修改,Buffer实际上是对底层内存的实际操作,Buffer 的内存一定是连续的

var buffer = Buffer.alloc(10)
// 赋值
buffer[0] = 88
buffer[1] = 556
buffer[3] = 12
console.log(buffer) // <Buffer 58 2c 00 0c 00 00 00 00 00 00>

最大值 255,556大于255,会转成16进制后截断,转成截断之后的

7. 获取Buffer

Buffer 的值只要在控制台或者页面中输出,一定是10进制

var buffer = Buffer.alloc(10)
// 赋值
buffer[0] = 88
buffer[1] = 56
buffer[2] = 0xaa
buffer[3] = 12
console.log(buffer[2]) // 170

一定以10进制输出

var buffer = Buffer.alloc(10)
// 赋值
buffer[0] = 88
buffer[1] = 56
buffer[2] = 0xaa
buffer[3] = 12
console.log(buffer[2].toString(16)) // aa

调用字符串,可以转化为想要的

8. 循环

var buffer = Buffer.alloc(10)
// 赋值
buffer[0] = 88
buffer[1] = 56
buffer[2] = 0xaa
buffer[3] = 12
for (var i = 0; i < buffer.length; i++) {
  console.log(buffer[i])
}

// 输出
88
56
170
12
0
0
0
0
0
0

9. 将16进制解码

var buffer = Buffer.from('我是zfb')
console.log(buffer.toString()) // 我是zfb

这就是Buffer常用的几个API,目前只是初探,用法和用途以后了解~


版权声明:本文为Luckyzhoufangbing原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。