📅  最后修改于: 2023-12-03 15:17:57.285000             🧑  作者: Mango
缓冲区(Buffer)是 Node.js 中非常重要的一个模块,可用于处理二进制数据流,包括处理 TCP 流、文件系统操作、以及其他进行二进制数据的场景。本文将会介绍 Node.js 缓冲区模块的使用方法与常见应用场景。
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
(可选): 写入缓冲区的开始位置,默认为 0length
(可选): 写入的字节数量,默认为缓冲区的长度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]);
这个方法用于从缓冲区中读取字符串,其中 start
和 end
分别表示要读取的区间范围,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));
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 缓冲区的使用有所帮助。