- Buffer 用于处理二进制数据流
- 实例类似证书数组,大小固定
- C++ 代码在 V8 堆外分配物理内存
例子
// 创建一个长度为 10、且用 0 填充的 Buffer。
const buf1 = Buffer.alloc(10);
// 创建一个长度为 10、且用 0x1 填充的 Buffer。
const buf2 = Buffer.alloc(10, 1);
// 创建一个长度为 10、且未初始化的 Buffer。
// 这个方法比调用 Buffer.alloc() 更快,
// 但返回的 Buffer 实例可能包含旧数据,
// 因此需要使用 fill() 或 write() 重写。
const buf3 = Buffer.allocUnsafe(10);
// 创建一个包含 [0x1, 0x2, 0x3] 的 Buffer。
const buf4 = Buffer.from([1, 2, 3]);
// 创建一个包含 UTF-8 字节 [0x74, 0xc3, 0xa9, 0x73, 0x74] 的 Buffer。
const buf5 = Buffer.from('tést');
// 创建一个包含 Latin-1 字节 [0x74, 0xe9, 0x73, 0x74] 的 Buffer。
const buf6 = Buffer.from('tést', 'latin1');
Buffer 类的方法
Buffer.alloc
Buffer.from
Buffer.concat
buf 实例的方法
buf.length
返回 buf 实例的字节长度
英文字符,一个字母占一个字节
中文字符,一个中文字符占3个字节
buf.fill
填充 buf 实例。
buf.indexOf
搜索位置,返回找到第一个索引值,类似于数组的 indexOf
Buffer 处理中文乱码问题
例子
const {StringDecoder} = require('string_decoder');
console.log(StringDecoder);
let decoder = new StringDecoder('utf8');
let buf = Buffer.from('中文字符串');
console.log('\n中文乱码问题: \n');
for (let i = 0; i < buf.length; i += 5) {
let b = Buffer.alloc(5);
buf.copy(b, 0, i);
console.log(b.toString());
} //打印出来乱码
console.log('\n 用 StringDecoder 解决: \n');
for (let i = 0; i < buf.length; i += 5) {
let b = Buffer.alloc(5);
buf.copy(b, 0, i);
console.log(decoder.write(b));
} //打印出正常的中文字符