NodeJS之Buffer缓冲器

一、简介

  Buffer 是一个类似于数组的对象 ,用于表示固定长度的字节序列,而其本质是一段内存空间,可以理解为二进制代码的存储单元。缓冲区可以在二进制数据传输之前或之后临时存储它,在发送方和接收方之间平滑地发送和接收数据。

二、特点及应用

  1. 数据固定:大小固定且无法调整,每个元素的大小为 1 字节(byte)。
  2. 数据转换:Buffer可以轻松地将不同编码的数据相互转换,例如将字串转换为二进制数据或将二进制数据转换为字串。
  3. 二进制数据储存:你可以使用Buffer来存储二进制数据,如文件内容、网络数据、图像、音频等。
  4. 性能优势:与字串相比,Buffer在处理大量数据时通常具有更高的性能,因为它不需要解析字符编码。
  5. 文件操作:Node.js的文件系统模块(fs)通常使用Buffer来读取和写入文件内容,这是文件I/O操作的常见方式
  6. 加密和解密:许多加密算法(如AES、RSA等)操作的输入和输出数据通常是Buffer类型。

三、如何使用Buffer?

  在NodeJS中提供了三种创建Buffer的函数,分別是Buffer.alloc()、Buffer.allocUnsafe()、Buffer.from()

  1. Buffer.alloc(size[, fill[, encoding]]): 返回一个指定大小的 Buffer 实例,如果没有设置 fill,则默认填满 0。
js 复制代码
let buf = Buffer.alloc(10);
console.log(buf);
// 结果为 <Buffer 00 00 00 00 00 00 00 00 00 00>
  1. Buffer.allocUnsafe(size): 返回一个指定大小的 Buffer 实例,但是它不会被初始化,所以它可能包含敏感的数据。Buffer.allocUnsafe 速度执行会比 Buffer.alloc 快,主要是因为使用allocUnsafe 容易包含旧数据或是随机的内容,所以在使用时要确保泄漏敏感数据而导致不可预测的问题。
js 复制代码
const size = 10; 
const buffer = Buffer.allocUnsafe(size);  
console.log(buffer); 
  1. Buffer.from():它允许你从不同的数据源创建 Buffer 对象。 Buffer.from() 方法通常用于将其他数据类型(如字串、阵列或 ArrayBuffer)转换为 Buffer,即可以处理不同数据类型之间的转换。
js 复制代码
//通过字符串创建 Buffer

let buf_3 = Buffer.from('hello');

//通过数组创建 Buffer

let buf_4 = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117]);
  1. 写入和输出Buffer:关于Buffer缓冲区需要注意的一件重要事情是它们是可变的,这意味着您可以修改存储在缓冲区中的数据。例如,你可以使用write()方法修改缓冲区的一部分:
js 复制代码
const buffer = Buffer.from('hello world');
buffer.write('buffer', 2);
console.log(buffer.toString()); // 'hebuffer world'
相关推荐
子兮曰4 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰4 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万4 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝4 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋4 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁4 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95274 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大4 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师4 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学4 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端