(一)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
09. 将16进制解码
var buffer = Buffer.from('我是zfb')
console.log(buffer.toString()) // 我是zfb
这就是Buffer常用的几个API,目前只是初探,用法和用途以后了解~