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 对象、数组和字符串。