- 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
image
Buffer.from
image
image
Buffer.concat
image
buf 实例的方法
buf.length
返回 buf 实例的字节长度
英文字符,一个字母占一个字节
image
中文字符,一个中文字符占3个字节
image
buf.fill
填充 buf 实例。
image
buf.indexOf
搜索位置,返回找到第一个索引值,类似于数组的 indexOf
image
Buffer 处理中文乱码问题
例子
image
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));
} //打印出正常的中文字符
image