📜  哪个模块用于 Node.js 中基于缓冲区的操作?(1)

📅  最后修改于: 2023-12-03 15:23:01.384000             🧑  作者: Mango

Node.js中基于缓冲区的操作模块

在 Node.js 中,可以通过缓冲区(Buffer)模块进行基于缓冲区的操作,这个模块是 Node.js 核心模块之一。缓冲区是用于临时存储数据的一段内存,可以在处理二进制数据和流数据时使用。

创建缓冲区

可以通过 Buffer.alloc()Buffer.from()new Buffer() 方法创建缓冲区对象。

Buffer.alloc()

Buffer.alloc() 方法用于创建指定大小的缓冲区,缓冲区对象的内容被初始化为 0。

// 创建一个长度为 10 字节的缓冲区
const buf1 = Buffer.alloc(10);
Buffer.from()

Buffer.from() 方法用于创建缓冲区对象,该方法可接受以下的参数:

  • 字符串
  • 数组
  • 数组缓冲区
  • 整数数组
  • 缓冲区
// 创建一个包含字符串 "hello world" 的缓冲区
const buf2 = Buffer.from('hello world');

// 创建一个包含数组 [1, 2, 3] 的缓冲区
const buf3 = Buffer.from([1, 2, 3]);

// 创建一个包含实际内存分配的缓冲区
const buf4 = Buffer.from(buf3);
new Buffer()

应该避免使用 new Buffer() 方法创建缓冲区对象,因为该方法已被废弃。可以使用 Buffer.from() 方法代替。

写入缓冲区
buf.write(string[, offset[, length]][, encoding]);
  • string - 写入缓冲区的字符串。
  • offset - 缓冲区开始写入的索引值,默认为 0 。
  • length - 写入的字节数,默认为 buffer.length - offset
  • encoding - 使用的编码。默认为 'utf8' 。
const buf = Buffer.alloc(256);
const len = buf.write('hello world');

console.log('写入字节数:' + len);
从缓冲区读取数据
buf.toString([encoding[, start[, end]]])
  • encoding - 使用的编码。默认为 'utf8' 。
  • start - 指定开始读取的索引位置,默认为 0。
  • end - 结束位置,默认为缓冲区的末尾。
const buf = Buffer.from('hello world');
console.log(buf.toString());
将缓冲区转换为 JSON 对象
buf.toJSON()
const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]);
const json = JSON.stringify(buf.toJSON());

console.log(json);
缓冲区合并
Buffer.concat(list[, totalLength])
  • list - 用于合并的 Buffer 对象数组列表。
  • totalLength - 指定合并后 Buffer 对象的总长度。
const buffer1 = Buffer.from('菜鸟教程 ');
const buffer2 = Buffer.from('www.runoob.com');
const buffer3 = Buffer.concat([buffer1, buffer2]);

console.log('buffer3 内容:' + buffer3.toString());
缓冲区比较
buf.compare(otherBuffer);
  • otherBuffer - 与 buf 对象比较的另外一个 Buffer 对象。
const buffer1 = Buffer.from('ABC');
const buffer2 = Buffer.from('ABCD');
const result = buffer1.compare(buffer2);

if (result < 0) {
  console.log(buffer1 + ' 在 ' + buffer2 + ' 之前');
} else if (result === 0) {
  console.log(buffer1 + ' 与 ' + buffer2 + ' 相同');
} else {
  console.log(buffer1 + ' 在 ' + buffer2 + ' 之后');
}
缓冲区拷贝
buf.copy(targetBuffer[, targetStart[, sourceStart[, sourceEnd]]])
  • targetBuffer - 要拷贝的 Buffer 对象。
  • targetStart - 数字,可选,目标对象开始写入的偏移量,默认为 0 。
  • sourceStart - 数字,可选,源对象开始读取的偏移量,默认为 0 。
  • sourceEnd - 数字,可选,源对象结束读取的偏移量,默认为 buffer.length
const buffer1 = Buffer.from('ABC');
const buffer2 = Buffer.alloc(3);
buffer1.copy(buffer2);
console.log('buffer2 content: ' + buffer2.toString());

以上就是 Node.js 缓冲区模块的相关操作介绍,更多详细信息可以查看官方文档。