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'));
相关推荐
李游Leo3 小时前
Node.js 开发环境安装与 npm/pnpm 国内镜像配置(Windows / macOS / Linux)
npm·node.js·pnpm·前端开发·开发环境
阿黎梨梨1 天前
AI也有记忆?LangChain Memory 管理指南
langchain·node.js·llm
小小龙学IT1 天前
libuv 开源异步 I/O 事件循环库深度解析:Node.js 的心脏,C++ 高性能网络程序的引擎
c++·开源·node.js
用户672465366052 天前
Node 守护进程日志转发踩坑记:stdio 管道、UTF-8 截断,和一个字符串按值传参的故事
node.js
coderCN2 天前
Nodejs express+knex(ORM框架)
前端·node.js
coderCN2 天前
Nodejs mysql2+express+yaml
node.js
烬羽2 天前
我把"时间胶囊"部署上腾讯云宝塔,跨域从根源消失了
nginx·node.js·全栈
东风破_3 天前
danci 2:创建的单词书到底存在哪里?从 Supabase 一路理解 ORM、Drizzle 和 RLS
数据库·后端·node.js
东风破_3 天前
danci 项目(三):从 JSON 数据到 AI Coding,真实项目里的数据清洗、Prompt 和工程规范
前端·后端·node.js
东风破_3 天前
danci 项目(一):从需求到架构,一个单词学习系统为什么会这样设计
前端·后端·node.js