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'));