Buffer(缓冲区)
- Buffer 的构造和数组很像,操作方法和数组也相似
- 数组中不能存储二进制文件,而 Buffer 就是专门用来寄存二进制数据的
-
它的元素为 16 进制的两位数。一个元素就代表一个字节
- 所以 Buffer 中每一个元素的范畴都是 00-ff 之间
- 00-ff 转换成二进制就是 00000000-11111111,这也是咱们计算机最底层的
- 一个 0 或者 1,咱们称之为 1 位(bit),8bit = 1byte(字节)
- 在 Buffer 中存储的是二进制数据,然而显示的时候都是以 16 进制显示
-
Buffer 中内存不是通过 JavaScript 调配的,而是底层通过 C ++ 申请的,也就是咱们能够间接通过 Buffer 来创立内存中的空间
let str = 'Hello World' // 将一个字符串转换为 Buffer let bufStr = Buffer.from(str) // 如何转换成字符串呢?let newStr = bufStr.toString() console.log(bufStr) // <Buffer 48 65 6c 6c 6f 20 57 6f 72 6c 64> console.log(newStr) // Hello World
创立指定大小的 Buffer
- Buffer 的大小,一旦创立好就能批改了
-
老的办法,Buffer 构造函数的形式,不举荐应用,官网说行将废除
// 创立一个 10 个字节的 Buffer let buf = new Buffer(10)
-
新的形式一:alloc
// 创立一个 10 个字节的 Buffer let buf = Buffer.alloc(10) buf[0] = 66 buf[1] = 255 buf[2] = 0xaa // 这些写法是间接赋值一个 16 进制的数据,16 进制的数据,就是 `0x` 结尾 console.log(buf) console.log(buff[2]) // 后果是 170,为什么不是 aa 呢?因为只有数字在控制台或页面中输入,肯定是 10 进制
-
新的形式二:allocUnsafe
// 创立一个 10 个字节的 Buffer // 和 alloc 根本一样,只是 allocUnsafe 创立的 Buffer 中可能会含有敏感数据 // 什么意思呢?alloc 在创立的时候,会清空那一块内存,而 allocUnsafe 不会清空,也就是说之前的数据,可能会泄露进去 // 既然如此,为什么还要 allocUnsafe 呢?因为 allocUnsafe 的效率更高,然而咱们失常来说还是应用 alloc let buf = Buffer.allocUnsafe(10) console.log(buf)