Node.js—Buffer(缓冲器)

文章目录

  • 1、概念
  • 2.、特点
  • 3、创建Buffer
    • 3.1 Buffer.alloc
    • 3.2 Buffer.allocUnsafe
    • 3.3 Buffer.from
  • 4、操作Buffer
    • 4.1 Buffer 与字符串的转化
    • 4.2 Buffer 的读写
  • 参考

1、概念

  • Buffer 是一个类似于数组的对象 ,用于表示固定长度的字节序列
  • Buffer 本质是一段内存空间,专门用来处理 二进制数据
  • 在buffer中存储的都是·二进制数据·,但是在显示的时候都是以16进制的形式显示。
  • Buffer中的内存不是通过JavaScript 分配的,而是在底层通过C++申请的。
  • 也就是我们可以直接通过Buffer来创建内存中的空间
    在这里插入图片描述

2.、特点

  • Buffer 大小固定无法调整
  • Buffer 性能较好,可以直接对计算机内存进行操作
  • 每个元素的大小为 1 字节(byte)
    在这里插入图片描述

3、创建Buffer

  • Node.js 中创建 Buffer 的方式主要如下几种:

3.1 Buffer.alloc

// 创建了一个长度为8字节的Buffer,相当于申请了8子节的内存空间,每个字节的值为0
const buf1 = Buffer.alloc(8)
console.log(buf1.length);
console.log(buf1);

输出:

8
<Buffer 00 00 00 00 00 00 00 00>

3.2 Buffer.allocUnsafe

//创建了一个长度为 8 字节的 Buffer,buffer 中可能存在旧的数据, 可能会影响执行结果,所以叫unsafe
const buf2 = Buffer.allocUnsafe(20)

注解:allocUnsafe在分配内存之前是不会清空数据,如果这些数据恰好保存了用户的一些敏感数据就造成了数据泄露
alloc方法会将内存的数据进行清空之后再分配就会安全很多,但是缺点是性能没有allocUnsafe高

3.3 Buffer.from

//通过字符串创建 Buffer
const buf3  = Buffer.from('hello')
console.log(buf3);

输出结果:

<Buffer 68 65 6c 6c 6f>
//通过数组创建 Buffer
const buf4 = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117])
console.log(buf4);

输出:

<Buffer 69 6c 6f 76 65 79 6f 75>

4、操作Buffer

4.1 Buffer 与字符串的转化

  • 我们可以借助 toString 方法将 Buffer 转为字符串
const buf4 = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117])
console.log(buf4.toString());

输出:

iloveyou

toString 默认是按照 utf-8 编码方式进行转换的。

4.2 Buffer 的读写

  • Buffer 可以直接通过 数组[ ] 的方式对数据进行处理。
    1.读取
const buf3 = Buffer.from('hello')
console.log(buf3[0]);

输出:

104

输出的是ASCII码值。

  1. 修改
const buf3 = Buffer.from('hello')
console.log(buf3);//改变前
//
buf3[0] = 97//ASCII值
console.log(buf3);//改变后
//

在提醒一次,终端输出的时候默认是16进制

我们转化成字符串的形式在看一遍。

const buf3 = Buffer.from('hello')
console.log(buf3.toString());//改变前
//hello
buf3[0] = 97
console.log(buf3.toString());//改变后
//aello

注意:

  1. 如果修改的数值超过 255 ,则超过 8 位数据会被舍弃
const buf = Buffer.from('hello');
buf[0] = 361;// 舍弃高位的数字  0001 0110 1001  => 0110 1001
console.log(buf);
  1. 一个 utf-8 的字符 一般 占 3 个字节
const buf = Buffer.from('你好');
console.log(buf);

输出:

<Buffer e4 bd a0 e5 a5 bd>

参考

尚硅谷2023版Node.js零基础视频教程,nodejs新手到高手

你可能感兴趣的:(Node.js笔记,node.js)