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'));
相关推荐
counterxing7 小时前
Agent 跑起来之后,难的是复用、观测和评测
node.js·agent·ai编程
濮水大叔19 小时前
告别 Django Admin!这个 NodeJS 全栈框架让你在 DTO 中直接配置 Table/Form 渲染
前端·typescript·node.js
环信即时通讯云20 小时前
环信回调服务本地开发指南:基于Node.js的Webhook测试方案
node.js
白菜__21 小时前
微信小程序网关逆向分析
javascript·微信小程序·小程序·node.js·网络爬虫·微信网关·小程序网关
Patrick_Wilson1 天前
IDE 升级重启后 Next.js dev 起不来?kill 无效的真正原因
node.js·next.js·前端工程化
小茴香3531 天前
大文件分片上传(前后端实现Vue+node.js)
前端·vue.js·node.js
liu_bees1 天前
nvm 极简教程:告别Node版本冲突!Windows下一键切换Node.js版本nvm安装与常用命令
windows·node.js·nvm
❀͜͡傀儡师1 天前
Aube:下一代 Node.js 包管理器,性能远超 pnpm
node.js·aube
海上彼尚2 天前
Nodejs也能写Agent - 3.基础篇 - Tools 与 Tool Calling
前端·人工智能·后端·node.js