nodejs 的基础模块 Buffer

96
辉夜乀
2017.12.07 00:00 字数 145

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

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
nodejs