NodeJS教程

Buffer 的创建、读写、截取和合并

Preview
  • Node.js Buffer 的创建、读写、截取和合并
  • 创建 Buffer 对象
  • 读写 Buffer
  • 截取 Buffer
  • 转换 Buffer
  • 合并 Buffer 对象
  • 总结

Node.js Buffer 的创建、读写、截取和合并

在 Node.js 中,Buffer 类被用于处理二进制数据。它是一个全局对象,可以直接使用。Buffer 类的实例类似于整数数组,但它允许你处理原始的二进制数据。在本文中,我们将介绍如何创建 Buffer 对象和合并多个 Buffer 对象。

创建 Buffer 对象

创建一个 Buffer 对象最简单的方法是通过 Buffer.from() 方法。该方法接受一个字符串、数组或 Buffer 来创建一个新的 Buffer 对象。

const buf1 = Buffer.from('hello');
const buf2 = Buffer.from([0x68, 0x65, 0x6c, 0x6c, 0x6f]);
const buf3 = Buffer.from(buf1);

你可以使用buf.toString()方法将 Buffer 转换为字符串。

console.log(buf1.toString()); // hello

还有两种方式可以创建 Buffer 对象:

const buf = Buffer.alloc(5); // 创建一个长度为 5 的 Buffer 对象
const buf = Buffer.allocUnsafe(5); // 创建一个长度为 5 的未初始化的 Buffer 对象

读写 Buffer

Buffer 对象可以通过索引读写单个字节。每个字节的范围是 0x00 到 0xFF。

const buf = Buffer.alloc(4);

buf[0] = 0x61;
buf[1] = 0x62;
buf[2] = 0x63;
buf[3] = 0x64;

console.log(buf.toString()); // abcd

你也可以使用 buf.write() 方法将字符串写入到 Buffer 对象中。

const buf = Buffer.alloc(4);

buf.write('abcd');

console.log(buf.toString()); // abcd

截取 Buffer

Buffer 对象可以使用buf.slice()方法截取子集。

const buf1 = Buffer.from('hello world');
const buf2 = buf1.slice(0, 5);

console.log(buf2.toString()); // hello

转换 Buffer

Buffer 对象可以转换为其他数据类型,如 JSON 对象、数组和字符串。

const buf = Buffer.from('hello');

console.log(buf.toJSON()); // { type: 'Buffer', data: [ 104, 101, 108, 108, 111 ] }

console.log(buf.toArray()); // [ 104, 101, 108, 108, 111 ]

console.log(buf.toString()); // hello

合并 Buffer 对象

Buffer 对象可以使用Buffer.concat()方法拼接在一起。

const buf1 = Buffer.from('hello');
const buf2 = Buffer.from(' world');
const buf3 = Buffer.concat([buf1, buf2]);

console.log(buf3.toString()); // hello world

当需要合并的 Buffer 对象数量很多时,可以使用 Buffer.concat() 方法的更高效的方式:

const buf1 = Buffer.from('hello');
const buf2 = Buffer.from(' world');
const buf3 = Buffer.from('!');
const bufList = [buf1, buf2, buf3];

const totalLength = bufList.reduce((acc, buf) => acc + buf.length, 0);
const result = Buffer.concat(bufList, totalLength);

console.log(result.toString()); // hello world!

在这个示例中,我们首先计算了所有 Buffer 对象的总长度,然后使用 reduce() 方法将它们合并到一个新的 Buffer 对象中。

总结

在 Node.js 中,Buffer 类被用于处理二进制数据。你可以使用 Buffer.from() 方法创建一个新的 Buffer 对象。Buffer 对象可以通过索引读写单个字节,也可以使用 buf.write() 方法将字符串写入到 Buffer 对象中。Buffer 对象可以使用 Buffer.concat() 方法拼接在一起,也可以使用 buf.slice() 方法截取子集。Buffer 对象可以转换为其他数据类型,如 JSON 对象、数组和字符串。