千家信息网

Nodejs中的buffer模块怎么使用

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍"Nodejs中的buffer模块怎么使用",在日常操作中,相信很多人在Nodejs中的buffer模块怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2026年10月31日Nodejs中的buffer模块怎么使用

这篇文章主要介绍"Nodejs中的buffer模块怎么使用",在日常操作中,相信很多人在Nodejs中的buffer模块怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Nodejs中的buffer模块怎么使用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1.buffer是什么?

我们知道,JS在对字符串、数组、数字、布尔值等都有对应的方法API进行操作处理,而在Node中,还需要文件操作、网络通信、操作数据库、数据传输等能力;文件在存储层面都是以二进制形式表示,在http的请求和响应中数据的传输也是以二进制数据进行传输,所以仅仅目前的JS能力还是不够的,也就在Node中提供了buffer模块。

即:使得NodeJS拥有像操作字符串一样来操作处理二进制数据的能力。buffer也被称为临时性暂存区,即临时存放输入和输出二进制数据的一段内存。

在之前的一篇文章聊聊Nodejs中的核心模块:stream流模块(看看如何使用)中,我们了解到在对大文件进行读取操作时候,一般不会一次性全部读取到内存中,而是以流的形式读取一段数据块,而连续的数据块便形成了数据流的概念。而在对数据块读取和写入过程中,数据首先会存储在buffer(临时性暂存区)的内存中,以待被处理。

1.1 了解buffer内存分配

buffer对象的内存分配并不是在V8的堆内存中,而是在Node的C++层面实现内存的申请;为了高效的使用申请来得内存,Node中采用slab分配机制(一种动态内存管理机制)。

1. 2 buffer的全局性

Node在进程启动时buffer就已经加装进入内存,并将其放入全局对象,使用时候可以无需require引入,但是官方但仍然建议通过 import 或 require 语句显式地引用它。

2. 创建Buffer

buffer实例除了可以在文件读取,http请求得到之外,还可以通过手动方式构造创建。

2.1 Buffer.alloc(size[, fill[, encoding]])

参数:

  • size: buffer长度

  • fill: 预填充值,默认值:0

  • encoding: 如果fill是字符串,则就是字符串的编码,默认:utf-8

import { Buffer } from 'buffer';const buf = Buffer.alloc(8);console.log(buf);// 

2.2 Buffer.allocUnsafe(size)

参数:

  • size: 新的buffer所需要长度

  • 以这种方式创建的 Buffer 实例的底层内存不会被初始化。 新创建的 Buffer 的内容是未知的,可能包含敏感的数据。

import { Buffer } from 'buffer';const buf = Buffer.allocUnsafe(8);console.log(buf);// 

2.3 Buffer.from(string[, encoding])

创建包含传入string的新buffer

参数:

  • string: 字符串

  • encoding: 编码,默认值:utf-8

import { Buffer } from 'buffer';const buf = Buffer.from('hello buffer');console.log(buf);// 

2.4 Buffer.from(array)

使用 0 - 255 范围内的字节 array 分配新的 Buffer。

import { Buffer } from 'buffer';const array = [0x62, 0x78, 0x84];const buf = Buffer.from(array);console.log(buf);// 

3. 复制Buffer

3.1 Buffer.from(buffer)

参数:

  • buffer,要复制的buffer实例

import { Buffer } from 'buffer';// 新建const buf1 = Buffer.alloc(10, 2);// 复制const buf2 = Buffer.from(buf1);console.log(buf1);// console.log(buf2);// 

3.2 buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])

将buf实例复制到target目标

import { Buffer } from 'buffer';const buf1 = Buffer.alloc(10, 2);const buf2 = Buffer.allocUnsafe(10)// 将buf1复制到buf2buf1.copy(buf2);console.log(buf1);// console.log(buf2);// 

4. 拼接Buffer

4.1 Buffer.concat(list[, totalLength])

返回list中所有buffer实例连接在一起的新buffer

参数:

  • list: |

  • totalLength: 连接总长度。

注意:

  • 如果列表没有条目,或者 totalLength 为 0,则返回新的零长度 Buffer。

  • 如果未提供 totalLength,则从 list 中的 Buffer 实例通过相加其长度来计算。

import { Buffer } from 'buffer';const buf1 = Buffer.alloc(4, 2);const buf2 = Buffer.alloc(4, 3);const buf3 = Buffer.concat([buf1, buf2]);console.log(buf1); // console.log(buf2); // console.log(buf3); // 

5. 截取Buffer

5.1 buf.slice([start[, end]])

从buf实例中返回新的Buffer实例,返回的新Buffer实例只是源buf实例的引用,即对新返回的实例修改会影响原有的Buffer实例

参数:

  • start: 起始位置,默认0

  • end: 结束位置,默认buf.length

import { Buffer } from 'buffer';const buf1 = Buffer.alloc(10, 2);// 截取const buf2 = buf1.slice(1,4);// 截取部分修改buf2[0] = 0x63;console.log(buf1);// console.log(buf2);// 

6. 填充Buffer

6.1 buf.fill(value[, offset[, end]][, encoding])

参数:

  • value,填充值

  • offset: 在开始填充 buf 之前要跳过的字节数,默认值0

  • end: 结束填充buf(不包括在内)的位置,默认值buf.length

  • encoding,如果value值为字符串,则为字符串编码,默认utf-8

import { Buffer } from 'buffer';const buf1 = Buffer.allocUnsafe(8).fill(2);console.log(buf1);// 

6.2 buf.write(string[, offset[, length]][, encoding])

根据 encoding 中的字符编码将 string 写入 buf 的 offset 处。

注意:length 参数是要写入的字节数。 如果 buf 没有足够的空间来容纳整个字符串,则只会写入 string 的一部分

参数:

  • string: 写入的字符串值

  • offset: 开始写入 string 之前要跳过的字节数,默认值为0

  • length: 写入的最大字节数,默认值buf.length - offset

  • encoding: 编码,默认utf-8

import { Buffer } from 'buffer';// buf1 length为12const buf1 = Buffer.alloc(12, 3);// write offset大于buf1.length,写入无效buf1.write('hello', 12);console.log(buf1);// // 部分写入buf1.write('hello', 10);// 

7. Buffer工具方法

7.1 Buffer.isBuffer(obj)

检验传入obj是否为buffer

import { Buffer } from 'buffer';const buf1 = Buffer.alloc(12, 3);console.log(Buffer.isBuffer(buf1));// true

7.2 Buffer.isEncoding(encoding)

检查传入的编码名称是否被Buffer所支持

import { Buffer } from 'buffer';console.log(Buffer.isEncoding('utf-8'))// true

8. Buffer与String的转换

Buffer转String

8.1 buf.toString([encoding[, start[, end]]])

参数:

  • encoding:使用的字符串编码,默认utf-8

  • start,开始位置,默认0

  • end,结束位置,默认buf.length

import { Buffer } from 'buffer';const buf1 = Buffer.allocUnsafe(26)for (let i = 0; i < 26; i++) {  // 97 是 'a' 的十进制 ASCII 值。  buf1[i] = i + 97;}console.log(buf1.toString())// abcdefghijklmnopqrstuvwxyz

String转Buffer

8.2 Buffer.from(string[, encoding])

参数:

  • string: 字符串

  • encoding: 编码,默认值:utf-8

import { Buffer } from 'buffer';const buf = Buffer.from('hello buffer');console.log(buf);// 

9. Buffer与Array的对比

9.1 与Array类似点

  • 可以使用下标获取指定位置的值

  • 可以使用length属性获取Buffer大小

  • 可以使用for...of遍历

9.2 与Array不同之处

  • 存储的是16进制的两位数

  • 值为0-255

  • 支持多种编码格式

  • 内存不在v8堆中分配

  • 底层有c++实现,上层由js控制

到此,关于"Nodejs中的buffer模块怎么使用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

内存 字符 实例 数据 参数 字符串 编码 模块 位置 字节 长度 二进制 文件 分配 学习 方法 能力 传输 处理 存储 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 亿人帮互联网科技有限公司 江苏根荣互联网科技 科技赋能下的互联网金融 工业互联网科技新基建 盈实互联网科技 互联网科技与金融科技 万易互联网科技 奇酷互联网科技公司 互联网科技论文 上海卓越科技 互联网 青海省互联网新科技 互联网科技公司招聘 互联网金融科技公司干啥的 青岛科技大学互联网大赛研究生 工业互联网展湾科技股份有限公司 锡山区互联网智能科技产品供应 杭州披云加互联网科技有限公司 互联网公司属于科技吗 安徽零酒互联网科技有限公司 广东猫王互联网科技有限公司电话 百单网互联网科技有限公司怎么样 科技企业和互联网企业 奇酷互联网科技 天津摩尔互联网科技 济南和联互联网科技有限公司 卫星互联网科技股票 互联网金融中的现代科技 浙南科技城互联网大厦建设工程 互联网科技快讯热点 马化腾互联网科技教学
0