【Node.js】Buffer(缓冲器)

以下笔记仅为个人学习,来源尚硅谷

1. 概念

Buffer 是一个类似于数组的对象,用于表示固定长度的字节序列。Buffer 本质是一段内存空间,专门用来处理二进制数据。
在这里插入图片描述

2. 特点

  1. Buffer 大小固定且无法调整
  2. Buffer 性能较好,可以直接对计算机内存进行操作
  3. 每个元素的大小为 1 字节(byte)

3. 使用

3-1. 创建 Buffer

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

  1. Buffer.alloc
 //创建了一个长度为 10 字节的 Buffer,相当于申请了 10 字节的内存空间,每个字节的值为 0
 let buf_1 = Buffer.alloc(10); // 结果为 <Buffer 00 00 00 00 00 00 00 00 00 00>
  1. Buffer.allocUnsafe
 //创建了一个长度为 10 字节的 Buffer,buffer 中可能存在旧的数据, 可能会影响执行结果,所以叫 
unsafe
 let buf_2 = Buffer.allocUnsafe(10);
  1. Buffer.from
 //通过字符串创建 Buffer
 let buf_3 = Buffer.from('hello');
 //通过数组创建 Buffer
 let buf_4 = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117]);

3-2 Buffer 与字符串的转化

我们可以借助 toString 方法将 Buffer 转为字符串

let buf_4 = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117]);
 console.log(buf_4.toString())

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

3-3 Buffer 的读写

Buffer 可以直接通过 [] 的方式对数据进行处理。

//读取
console.log(buf_3[1]);
 //修改
buf_3[1] = 97;
 //查看字符串结果
console.log(buf_3.toString());

注意:

  1. 如果修改的数值超过 255 ,则超过 8 位数据会被舍弃
  2. 一个 utf-8 的字符 一般占 3 个字

4. 应用场景

I / O 操作

通过流的形式,将一个文件的内容读取到另一个文件中。

const fs = require('fs');

const inputStream = fs.createReadStream('input.txt');
const outputStream = fs.createWriteStream('output.txt');

inputStream.pipe(outputStream); // 管道读写

加解密

在一些加解密算法中会遇到使用 Buffer,例如
crypto.createCipheriv 的第二个参数key
为 string或 Buffer类型。

zlib.js

zlib.js为 Node.js的核心库之一,其利用了缓冲区(Buffer) 的功能来操作二进制数据流,提供了压缩或解压功能。

相关推荐

  1. c++中缓冲器的使用案例

    2024-07-19 22:12:01       39 阅读
  2. OpenGL帧缓冲:渲染缓冲区对象 Renderbuffer Objects

    2024-07-19 22:12:01       47 阅读
  3. Nginx实现(缓冲区

    2024-07-19 22:12:01       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 22:12:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 22:12:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 22:12:01       45 阅读
  4. Python语言-面向对象

    2024-07-19 22:12:01       55 阅读

热门阅读

  1. [C/C++入门][ifelse]15、判断奇偶数

    2024-07-19 22:12:01       16 阅读
  2. 99:PostgreSQL开启SQL语句日志收集

    2024-07-19 22:12:01       18 阅读
  3. 数学黑洞6174

    2024-07-19 22:12:01       18 阅读
  4. 日文医学文献pdf怎么翻译

    2024-07-19 22:12:01       16 阅读
  5. 8.3 End-to-end Data Protection (Optional)

    2024-07-19 22:12:01       17 阅读
  6. 智能门锁的工作原理

    2024-07-19 22:12:01       19 阅读
  7. vue3 学习笔记16 -- elementPlus的使用

    2024-07-19 22:12:01       22 阅读
  8. XML 工具类

    2024-07-19 22:12:01       18 阅读
  9. ios CCUIColor.m

    2024-07-19 22:12:01       17 阅读