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'));
相关推荐
前端小超人rui21 小时前
【Node.js Express中间件理解及中间件分类和作用】
中间件·node.js·express
前端小超人rui1 天前
封装Express 自定义中间件
中间件·node.js·express
码界索隆1 天前
【腾讯位置服务开发者征文大赛】用 AI Agent + MCP 重构“周边去哪儿”决策链路:我的真实踩坑与MVP落地复盘
人工智能·typescript·node.js
Aolith1 天前
从前端模拟到全栈认证:我的论坛 JWT 实战复盘
node.js·express
Rabbit_QL1 天前
【前端基础】npm install 是干嘛的(带参数 vs 不带参数)
前端·npm·node.js
阿赛工作室1 天前
node.js使用AES加密/解密的详细教程
node.js
Rabbit_QL1 天前
【前端工具链小白篇】前端工具链全景:Node、npm、Vite 各管什么
前端·npm·node.js
身如柳絮随风扬1 天前
前端基础进阶:Node.js + ES6 + Axios + Vue 全面入门指南
前端·node.js·es6
Weisley2 天前
从 Java 到 Node:我如何理解 async/await 和 fetch
node.js
六bring个六2 天前
opencv简单操作(一)
前端·webpack·node.js