nodejs 的基础模块 Buffer

Buffer 文档

  • 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

nodejs 的基础模块 Buffer_第1张图片
image

Buffer.from

nodejs 的基础模块 Buffer_第2张图片
image

nodejs 的基础模块 Buffer_第3张图片
image

Buffer.concat

nodejs 的基础模块 Buffer_第4张图片
image

buf 实例的方法

buf.length

返回 buf 实例的字节长度

英文字符,一个字母占一个字节

nodejs 的基础模块 Buffer_第5张图片
image

中文字符,一个中文字符占3个字节

nodejs 的基础模块 Buffer_第6张图片
image

buf.fill

填充 buf 实例。

nodejs 的基础模块 Buffer_第7张图片
image

buf.indexOf

搜索位置,返回找到第一个索引值,类似于数组的 indexOf

nodejs 的基础模块 Buffer_第8张图片
image

Buffer 处理中文乱码问题

例子

nodejs 的基础模块 Buffer_第9张图片
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));
}   //打印出正常的中文字符
nodejs 的基础模块 Buffer_第10张图片
image

你可能感兴趣的:(nodejs 的基础模块 Buffer)