重学nodejs系列之buffer(二)

248 阅读2分钟

buffer是什么

在Node.js中,Buffer是一个用于处理二进制数据的类。它提供了对二进制数据的直接操作,不需要经过编码和解码的过程,因此在处理网络流、文件系统操作等场景中非常常用。

const buf1 = Buffer.alloc(10); // 创建一个大小为10字节的Buffer,用0填充
console.log(buf1) // <Buffer 00 00 00 00 00 00 00 00 00 00>

buffer怎么用

buffer是nodejs的一个全局变量,所以可以直接使用

1. 写入数据

使用 write 方法向 Buffer 中写入数据:

const buffer = Buffer.alloc(10);

// 写入字符串到 Buffer
buffer.write('Hello');

console.log(buffer.toString()); // 输出:Hello

2. 读取数据

通过 toString 方法将 Buffer 中的数据转换为字符串进行读取:

const buffer = Buffer.from('Hello', 'utf-8');

// 读取 Buffer 中的数据
const data = buffer.toString();

console.log(data); // 输出:Hello

3. 修改数据

直接修改 Buffer 中的内容:

const buffer = Buffer.from('Hello');

// 修改 Buffer 中的数据
buffer[1] = 111; // 十进制表示,ASCII码中的 'o'
buffer[4] = 33;  // 十进制表示,ASCII码中的 '!'

console.log(buffer.toString()); // 输出:Holl!

4. 查看数据

可以通过索引直接查看 Buffer 中的数据:

const buffer = Buffer.from('Hello');

// 查看 Buffer 中的数据
console.log(buffer[0]); // 输出:72
console.log(buffer[1]); // 输出:101

5. 增加数据

Buffer 是一个固定大小的数据结构,一旦创建其大小就不可改变。因此,增加数据需要创建一个新的 Buffer,并将原有的数据复制到新的 Buffer 中。

const buffer = Buffer.from('Hello');

// 增加数据到 Buffer
const newBuffer = Buffer.alloc(buffer.length + 3);

buffer.copy(newBuffer); // 复制原有数据
newBuffer.write('!!!', buffer.length); // 写入新数据

console.log(newBuffer.toString()); // 输出:Hello!!!

Buffer.fromBuffer.alloc 是用于创建 Buffer 对象的两种不同的方法,它们有以下区别:

  1. 数据来源:
  • Buffer.from 接受一个已有的数据源,例如字符串、数组等,并将其复制到新创建的 Buffer 中。
  • Buffer.alloc 分配一个指定大小的新 Buffer,但不会对其进行初始化,即新 Buffer 中的内容可能是随机的或包含旧数据。
  1. 数据编码:
  • Buffer.from 可以指定数据源的编码方式,例如 'utf-8'。
  • Buffer.alloc 不涉及数据源的编码,仅分配指定大小的 Buffer。
  1. 数据复制与初始化:
  • Buffer.from 复制已有的数据源到新 Buffer,初始化新 Buffer。
  • Buffer.alloc 不进行数据复制,但会初始化新 Buffer,新 Buffer 的内容可能是随机的或包含旧数据。
  1. 适用场景:
  • Buffer.from 适用于已有数据源,需要在新 Buffer 中复制该数据的场景。
  • Buffer.alloc 适用于分配指定大小的新 Buffer,但不关心其内容的场景。

总体而言,Buffer.from 更适合处理已有数据源的场景,而 Buffer.alloc 更适合在不关心数据源的情况下分配指定大小的 Buffer。