Node.js 的 Buffer 是什么?一站式了解指南

Node.js 中,Buffer 是一种用于处理二进制数据的机制。它允许你在不经过 JavaScript 垃圾回收机制的情况下直接操作原始内存,从而更高效地处理数据,特别是在处理网络流、文件系统操作和其他与 I/O 相关的任务时。Buffer 是一个全局对象,不需要额外的模块导入就可以使用。

Node.js Buffer 的基本概念

Buffer 对象类似于数组,但它存储的是原始的二进制数据。它可以分配固定大小的内存块来存储数据,从而避免了频繁的内存分配和垃圾回收,这在处理大量数据时非常有用。

每个 Buffer 对应底层的固定长度的内存分配。我们可以把 Buffer 看成是一个整数数组,这个数组对应着 V8 堆内存中的一段。Node 使用 Buffer 来显示二进制数据,比如图像、文件等。

如何使用 Node.js 的 Buffer

创建 Buffer

可以使用多种方式创建 Buffer 对象,其中最常用的是使用构造函数来分配指定大小的内存块:

const buffer = Buffer.alloc(10); // 创建一个大小为 10 字节的 Buffer

还可以使用现有的数据来创建 Buffer:

const bufferFromData = Buffer.from("Hello, Node.js"); // 从字符串创建 Buffer

操作 Buffer

一旦创建了 Buffer 对象,你可以通过索引访问其中的数据,也可以使用各种方法来修改、拼接和截取数据。

常用的 Buffer 操作方法包括:

  • buffer.length:获取 Buffer 的长度(字节数)。
  • buffer.write(string[, offset[, length]][, encoding]):将字符串写入 Buffer。
  • buffer.toString([encoding[, start[, end]]]):将 Buffer 转换为字符串。
  • buffer.slice([start[, end]]):截取 Buffer 的一部分。
  • Buffer.concat(list[, totalLength]):将多个 Buffer 拼接成一个。

写入 Buffer

可以使用 write() 方法向 Buffer 写入数据:

const buf = Buffer.alloc(10);buf.write('Hello');
console.log(buf.toString()); // Hello

从 Buffer 读取数据

可以使用方法如 toString() 将 Buffer 转换为字符串,或者使用 slice() 方法提取其中的一段。

const buf = Buffer.from('Hello World');console.log(buf.toString()); // Hello World 
console.log(buf.slice(0, 5).toString()); // Hello

实践案例:基本 Node.js 服务器

以下是一个可以直接运行的 Buffer 使用案例。首先,需要一个 data.txt 文件,内容如下:

Hello, Node.js Buffer!

然后是完整的代码:

const http = require('http');
const fs = require('fs');const server = http.createServer((req, res) => {// 读取data.txt文件fs.readFile(__dirname + '/data.txt', (err, data) => {if (err) throw err;// 设置HTTP头信息res.writeHead(200, {'Content-Type': 'text/plain'});// 直接将data Buffer写入响应res.end(data);});
});server.listen(8000, () => {console.log('Server listening on port 8000'); 
});

要测试这个例子,你需要将上述代码保存为 example.js,在同一目录下创建 data.txt 文件,内容为"Hello, Node.js Buffer!",最后执行node server.js。打开浏览器访问:http://localhost:8000,你应该可以看到"Hello, Node.js Buffer!"被输出。

这样就利用 Buffer 从文件读取内容,并直接写入 HTTP 响应中。Buffer 允许我们操作底层数据,避免多余的拷贝。

提示与注意事项

  • 在处理网络流和文件时,Buffer 可以帮助你高效地读取和写入数据。
  • 当从文件或网络中读取数据时,注意控制读取的缓冲区大小,以避免一次性读取过多数据导致内存溢出。
  • Buffer 的默认编码是 utf-8,但是在某些情况下你可能需要指定其他编码。
  • 虽然 Buffer 可以直接操作内存,但要小心避免访问超出分配范围的内存区域,以防止安全问题。

通过 Apifox 调试后端接口

Apifox 是一个比 Postman 更强大的接口测试工具,Apifox = Postman + Swagger + Mock + JMeter,Apifox支持调试 http(s)、WebSocket、Socket、gRPC、Dubbo 等协议的接口,并且集成了 IDEA 插件。在后端人员写完服务接口时,测试阶段可以通过 Apifox 来校验接口的正确性,图形化界面极大的方便了项目的上线效率。

在本文的例子中,就可以通过 Apifox 来测试接口。新建一个项目后,在项目中选择 “调试模式” ,填写请求地址后即可快速发送请求,并获得响应结果,上文的实践案例如图所示:

总结

Node.js 的 Buffer 是一个用于处理二进制数据的重要工具,它提供了高效的内存操作机制,特别适用于处理网络流、文件操作等 I/O 相关的任务。本文介绍了如何创建、操作 Buffer 对象,并通过一个简单的实践案例演示了如何在基本的 Node.js 服务器中使用 Buffer。

知识扩展:

  • Node.js 中 Base64 编码原理是什么?一文介绍 nodejs 中 base64 的用法

参考链接:

Node.js Buffer Documentation:Buffer | Node.js v16.20.2 Documentation

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/105271.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

layui框架学习(37:学习laytpl基本语法)

layui中的模板引擎模块laytpl属于轻量的 JavaScript 模板引擎,支持在页面中将指定的数据按指定的模板进行展示或处理,此处的模板是指一段包含html和脚本的文本(感觉类似asp.net core中的razor标记语言,在网页中嵌入基于服务器的代…

Cent OS 中各个文件夹功能

目录 一、根目录简述 二、目录详细分级说明 (一)bin (二)sbin (三)lib (四)etc (五)dev (六)usr (七&#xff09…

vue组件的使用

一、首先要穿件组件构造器对象,或者导入组件 1..在本部分注册组件其中组件为子组件 2.在本部分注册组件 二、而后注册组件 1.在本部分注册组件其中组件为子组件 2.在本部分注册组件 三、 接着,使用组件。 1.在本部分注册组件其中组件为子组件 其中v-i…

开源硬件:下一个技术革命?

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

【Git游戏】提交的技巧

修改历史的提交 rebase 通过git rebase -i 将要修改的提交提到最前端, 然后修改,再通过git commit --amend提交该记录,最后通过git rebase -i 在替换会原始的位置 (该过程中有可能会产生rebase confict) cherry-pick …

EMR电子病历系统 SaaS电子病历编辑器源码 电子病历模板编辑器

EMR(Electronic Medical Record)指的是电子病历。它是一种基于电子文档的个人医疗记录,可以包括病人的病史、诊断、治疗方案、药物处方、检查报告和护理计划等信息。EMR采用计算机化的方式来存储、管理和共享这些信息,以便医生和医…

浅谈视频汇聚平台EasyCVR视频平台在城市安全综合监测预警台风天气中的重要作用

夏日已至,台风和暴雨等极端天气频繁出现。在城市运行过程中,台风所带来的暴雨可能会导致城市内涝等次生灾害,引发交通瘫痪、地铁停运、管网泄漏爆管、路面塌陷、防洪排涝、燃气爆炸、供热安全、管廊安全、消防火灾等安全隐患,影响…

储能运行约束的Matlab建模方法

最近一段时间有很多人问我最优潮流计算中储能系统的建模方法。部分朋友的问题我回复了,有些没有回消息的,我就不再一一回复了,在这里我写一篇博客统一介绍一下。 1.储能系统介绍 首先,让【GPT】简单介绍一下储能系统:…

Qt --- 显示相关设置 窗口属性等

主界面,窗口 最小化 最大化 关闭按钮、显示状态自定义: setWindowFlags(Qt::CustomizeWindowHint); setWindowFlags(Qt::WindowCloseButtonHint); //只要关闭按钮 setWindowFlags(Qt::WindowFlags type) Qt::FrameWindowHint:没有边框的窗口 Qt::Window…

WPF基础入门-Class3-WPF数据模板

WPF基础入门 Class3&#xff1a;WPF数据模板 1、先在cs文件中定义一些数据 public partial class Class_4 : Window{public Class_4(){InitializeComponent();List<Color> test new List<Color>();test.Add(new Color() { Code "Yellow", Name &qu…

Spring源码编译-for mac

超详细的spring源码编译 记&#xff1a;编译成功时间&#xff1a;2023.08.19 环境准备&#xff1a; 1.idea 2023.1.1 Community Edition 2.jdk1.8 3.gradlegradle-5.6.4 4.spring源码(版本&#xff1a;spring-framework-v5.2.25.RELEASE) 一.spring源码下载 github 加速网站&…

day-30 代码随想录算法训练营 回溯part06

332.重新安排行程 思路&#xff1a;使用unordered_map记录起点机场对应到达机场&#xff0c;内部使用map记录到达机场的次数&#xff08;因为map会进行排序&#xff0c;可以求出最小路径&#xff09; class Solution { public:vector<string>res;unordered_map<stri…

基于数据湖的多流拼接方案-HUDI概念篇

目录 一、为什么需要HUDI&#xff1f; 1. 传统技术选型存在哪些问题&#xff1f; 2. Hudi有什么优点&#xff1f; 基于 Hudi Payload 机制的多流拼接方案&#xff1a; 二、HUDI的应用场景 1. 什么场景适合使用hudi&#xff1f; 2. 什么场景不适合使用hudi&#xff1f; …

Oracle 查询(当天,月,年)的数据

Trunc 在oracle中&#xff0c;可利用 trunc函数 查询当天数据&#xff0c;该函数可用于截取时间或者数值&#xff0c;将该函数与 select 语句配合使用可查询时间段数据 查询当天数据 --sysdate是获取系统当前时间函数 --TRUNC函数用于截取时间或者数值&#xff0c;返回指定的…

《Go 语言第一课》课程学习笔记(十)

复合数据类型 同构复合类型&#xff1a;从定长数组到变长切片 由多个同构类型&#xff08;相同类型&#xff09;或异构类型&#xff08;不同类型&#xff09;的元素的值组合而成&#xff0c;这类数据类型在 Go 语言中被称为复合类型。 数组有哪些基本特性&#xff1f; Go 语…

Go 语言的实战案例 SOCKS5 代理 | 青训营

Powered by:NEFU AB-IN 文章目录 Go 语言的实战案例 SOCKS5 代理 | 青训营 引入TCP echo serverauth 认证请求阶段relay阶段 Go 语言的实战案例 SOCKS5 代理 | 青训营 GO语言工程实践课后作业&#xff1a;实现思路、代码以及路径记录 引入 代理是指在计算机网络中&#xff…

STL---list

目录 1. list的介绍及使用 1.1 list的介绍 1.2 list的使用注意事项 2.list接口介绍及模拟实现 2.1构造​编辑 2.2容量 2.3修改 3.list迭代器 4.迭代器失效 5.模拟实现 6.vector和list的区别 1. list的介绍及使用 1.1 list的介绍 list的文档介绍 1. list是可以在常…

MySQL下载安装配置

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

电脑文件删除了可以找回吗?分享一种简单恢复删除电脑文件办法!

电脑文件删除了可以找回吗&#xff1f;可以。在原理上讲电脑删除的文件是有希望恢复的&#xff0c;因为操作系统在删除文件的时候并会不会立刻将文件彻底删除。当文件被删除的时候&#xff0c;其文件记录被删除&#xff0c;并且被文件占用的磁盘空间被标记为空闲。 这样对于用户…

成集云 | 旺店通多包裹数据同步钉钉 | 解决方案

源系统成集云目标系统 方案介绍 随着品牌电商兴起&#xff0c;线上线下开始逐渐融为一体&#xff0c;成集云以旺店通ERP系统为例&#xff0c;通过成集云-旺店通连接器&#xff0c;将旺店通ERP系统多包裹数据同步至钉钉实现数据互通&#xff0c;帮助企业解决了电商发货存在的错…