📜  Node.js 缓冲区完整参考(1)

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

Node.js 缓冲区完整参考

缓冲区(Buffer)是 Node.js 中非常重要的一个模块,可用于处理二进制数据流,包括处理 TCP 流、文件系统操作、以及其他进行二进制数据的场景。本文将会介绍 Node.js 缓冲区模块的使用方法与常见应用场景。

创建缓冲区
创建长度为 n 的空缓冲区
var buf = Buffer.alloc(n);

这行代码会创建一个具有 n 个字节长度的缓冲区,每个字节都默认初始化为 0。

通过字符串创建缓冲区
var buf = Buffer.from(string, [encoding]);

这行代码会创建一个缓冲区,其中包含了输入字符串的拷贝,encoding 参数默认为 'utf8'。

通过数组创建缓冲区
var buf = Buffer.from(array);

这行代码会创建一个缓冲区,其中包含了输入数组的拷贝。

缓冲区写入
写入缓冲区的格式如下
buf.write(string, [offset], [length], [encoding]);
  • string: 写入缓冲区的字符串
  • offset (可选): 写入缓冲区的开始位置,默认为 0
  • length (可选): 写入的字节数量,默认为缓冲区的长度
  • encoding (可选): 字符串的编码方式,默认为 'utf8'

下面是一个例子:

var buf = Buffer.alloc(256);

var len = buf.write('Hello World');
console.log("写入字节数 : "+  len);

在上面的例子中,会向缓冲区写入字符串 "Hello World",并返回写入的字节数量。

缓冲区写入整数
buf.writeInt8(value, offset);
buf.writeUInt8(value, offset);
buf.writeInt16LE(value, offset);
buf.writeInt16BE(value, offset);
buf.writeUInt16LE(value, offset);
buf.writeUInt16BE(value, offset);
buf.writeInt32LE(value, offset);
buf.writeInt32BE(value, offset);
buf.writeUInt32LE(value, offset);
buf.writeUInt32BE(value, offset);
buf.writeBigInt64LE(value, offset);
buf.writeBigInt64BE(value, offset);
buf.writeBigUInt64LE(value, offset);
buf.writeBigUInt64BE(value, offset);

这些方法用于向缓冲区写入整数,其中 value 为要写入的整数,offset 为写入的起始位置。

缓冲区写入浮点数
buf.writeFloatLE(value, offset);
buf.writeFloatBE(value, offset);
buf.writeDoubleLE(value, offset);
buf.writeDoubleBE(value, offset);

这些方法用于向缓冲区写入浮点数,其中 value 为要写入的浮点数,offset 为写入的起始位置。

缓冲区读取
缓冲区读取函数格式如下
buf.readUInt8(offset);
buf.readUInt16LE(offset);
buf.readUInt16BE(offset);
buf.readUInt32LE(offset);
buf.readUInt32BE(offset);
buf.readInt8(offset);
buf.readInt16LE(offset);
buf.readInt16BE(offset);
buf.readInt32LE(offset);
buf.readInt32BE(offset);
buf.readBigInt64LE(offset);
buf.readBigInt64BE(offset);
buf.readBigUInt64LE(offset);
buf.readBigUInt64BE(offset);
buf.readFloatLE(offset);
buf.readFloatBE(offset);
buf.readDoubleLE(offset);
buf.readDoubleBE(offset);

这些方法用于从缓冲区中读取数值型数据,其中 offset 为读取数据的起始位置。

缓冲区读取字符串
buf.toString([encoding], [start], [end]);

这个方法用于从缓冲区中读取字符串,其中 startend 分别表示要读取的区间范围,encoding 表示要读取的字符串的编码方式,默认为 'utf8'。

这是一个例子:

var buf = Buffer.alloc(26);
for (var i = 0 ; i < 26 ; i++) {
  buf[i] = i + 97;
}

console.log( buf.toString('ascii'));     
console.log( buf.toString('ascii',0,5));
console.log( buf.toString('utf8',0,5));
console.log( buf.toString(undefined,0,5));
缓冲区转换为 JSON 对象
buf.toJSON();

这个方法用于将缓冲区转换为 JSON 对象。

这是一个例子:

var buf = Buffer.from('hello world');
var json = JSON.stringify(buf);

console.log(json);

var copy = JSON.parse(json, (key, value) => {
  return value && value.type === 'Buffer'
    ? Buffer.from(value.data)
    : value;
});

console.log(copy);

上面的例子中,将一个缓冲区转换为一个 JSON 对象。

缓冲区比较
buf.compare(otherBuffer);

这个方法用于比较两个缓冲区是否相同。

缓冲区拷贝
buf.copy(targetBuffer, [targetStart], [sourceStart], [sourceEnd]);

这个方法用于拷贝源缓冲区的数据到目标缓冲区。

缓冲区长度和填充
获取缓冲区的长度
buf.length;

这个属性用于获取缓冲区的长度。

填充缓冲区内容
buf.fill(value, [offset], [end], [encoding]);

这个方法用于填充缓冲区的数据,其中 value 表示要填充的值,end 表示要填充的范围,默认为缓冲区的长度。

这是一个例子:

var buf = Buffer.alloc(5);

buf.fill().write('hello');
console.log(buf.toString()); 

上面的例子中,将一个长度为 5 的缓冲区填充为 "hello"。

总结

本文介绍了 Node.js 缓冲区模块的基本用法,包括创建缓冲区、缓冲区写入、缓冲区读取、缓冲区转换为 JSON 对象、缓冲区比较和缓冲区拷贝等操作。希望本文能对 Node.js 缓冲区的使用有所帮助。