Node.js——Buffer

Buffer

1、创建Buffer对象

在Node.js中,Buffer类是一个可以在任何模块中被利用的全局类,不需要为该类的使用而加载任何模块。

1.1、Buffer.from()

js 复制代码
// 从字符串创建
const buf1 = Buffer.from('Hello');

// 从数组
const buf2 = Buffer.from([1, 2, 3]);

// 从另一个 Buffer
const buf3 = Buffer.from(buf1);

1.2、Buffer.alloc()

js 复制代码
//安全,推荐
const buf = Buffer.alloc(10); // 10 字节,自动清零

1.3、Buffer.allocUnsafe()

js 复制代码
//快但不安全
const buf = Buffer.allocUnsafe(10); // 可能包含旧数据

2、核心属性与方法

2.1、常用属性

js 复制代码
buf.length      // 字节长度
buf[index]      // 访问某个字节(0~255)
js 复制代码
const buf = Buffer.from('ABC');
console.log(buf[0]); // 65 (A)

2.2、写入数据

js 复制代码
buf.write(string, offset, length, encoding)
js 复制代码
const buf = Buffer.alloc(10);
buf.write('Hello', 0, 5, 'utf8');

2.3、读取数据

js 复制代码
buf.toString(encoding, start, end)
js 复制代码
buf.toString();          // 'Hello'
buf.toString('hex');     // 十六进制
buf.toString('base64');  // Base64

2.4、复制与切片

js 复制代码
//会共享内存
const buf = Buffer.from('abcdef');
const slice = buf.slice(0, 3);

slice[0] = 100;
console.log(buf.toString()); // 已修改原 buffer
js 复制代码
//更安全
const target = Buffer.alloc(3);
buf.copy(target, 0, 0, 3);

3、编码机制

Node.js 默认使用 UTF-8

js 复制代码
Buffer.from('中文', 'utf8')
Buffer.from('中文', 'hex') // 错误

常见编码:

  • utf8
  • ascii
  • latin1
  • hex
  • base64

4、实际应用

4.1、文件读写

js 复制代码
const fs = require('fs');

const data = fs.readFileSync('./image.png');
console.log(data instanceof Buffer); // true

4.2、网络请求

js 复制代码
http.createServer((req, res) => {
  let chunks = [];
  req.on('data', chunk => chunks.push(chunk));
  req.on('end', () => {
    const body = Buffer.concat(chunks);
  });
});

4.3、加密/哈希

js 复制代码
const crypto = require('crypto');

const hash = crypto.createHash('sha256');
hash.update(Buffer.from('hello'));
console.log(hash.digest('hex'));
相关推荐
damoluomu16 小时前
Node 的 Headless 出厂没有前台,Java 的 Headless 是从门户里长出来的
java·开发语言·node.js
Dumbness17 小时前
一个手机号验证码登录接口的五个坑:无限发码、无限试码,传个数字就让 Express 进程退出
node.js·express
怒放的生命199118 小时前
本地用 pnpm 省磁盘,团队继续用 npm:极简实践
前端·npm·node.js
Hone2 天前
我把「自动发文章到掘金」做成了一个 Agent 技能:juejin-skills
node.js·ai编程·前端工程化
Dumbness2 天前
二十行手写的 SKILL.md 头部解析,遇到 YAML 的折叠写法、单引号和嵌套键就读错:和 js-yaml 逐条对照
node.js·ai编程
只睡四小时2 天前
MCP 弃用 SSE?Node 分帧漏 81.7% 事件
node.js·webassembly·实时通信·mcp·streamable http
hey you~3 天前
个体户门店办理400电话,如何对接订单系统实现来电弹窗
node.js·webhook·400电话·门店数字化·来电弹窗·订单系统对接
YIAN4 天前
RAG 学到最后,我真正学会的不是“检索”,而是让系统知道自己缺什么
langchain·node.js·llm
用户11977079480734 天前
GitHub 电商开源项目分享:用 sharp 批量出饰品主图,试了裁剪、细节图和色彩配置文件三个坑
前端·node.js
donecoding4 天前
pnpm 配好了,为什么执行的还是另一份?命令入口与运行时排查
node.js·前端工程化