首先我们来了解一下NodeJS中Buffer模块的基础知识。
什么是Buffer
在Node.js中,Buffer 对象用于表示固定长度的二进制数列,它可以存储各种数据(包括字符串、JSON、二进制数据等)。
我们可以将其看做一个 JavaScript 的数组,用于存储字节数据(byte)。与数组不同的是,Buffer 分配的是堆内存,因此可以被直接用于 I/O 操作。
Buffer 对象在 V8 堆外分配物理内存,这是因为在 V8 堆中分配的对象受到内存限制(通常为 1.4GB)的限制。
通常我们会使用以下两种方式来创建一个 Buffer 对象:
- 通过 Buffer.alloc(size) 创建一个长度为 size 字节的 Buffer 对象。
- 通过 Buffer.from(data) 创建包含 data 的 Buffer 对象。
下面,我们通过实例来进一步了解 Buffer 的用法。
创建 Buffer 对象
我们通过以下代码来演示如何创建一个 Buffer 对象,并输出其内容:
const buf1 = Buffer.alloc(10); // 创建一个长度为 10 的 Buffer 对象
console.log(buf1); // <Buffer 00 00 00 00 00 00 00 00 00 00>
const buf2 = Buffer.from('hello'); // 通过字符串创建一个 Buffer 对象
console.log(buf2); // <Buffer 68 65 6c 6c 6f>
console.log(buf2.toString()); // 输出 'hello'
可以看到,当我们创建一个长度为 10 的 Buffer 对象时,其元素值均为 0。而对于通过字符串创建的对象,则会显示字符串中每个字符的 ASCII 码值。通过 buf2.toString() 可以将其解码为字符串类型。
写入与读取
我们可以使用 Buffer 对象的 write 和 read 方法在存储器和 I/O 操作中读写数据,下面我们通过一个文件读写的例子来进一步了解这个方法。
const fs = require('fs');
const buf = Buffer.alloc(1024);
console.log('准备读取文件...');
fs.open('input.txt', 'r+', (err, fd) => {
if (err) {
return console.error(err);
}
console.log('文件打开成功!');
console.log(`准备读取 ${buf.length} bytes 的数据...`);
fs.read(fd, buf, 0, buf.length, 0, (err, bytes) => {
if (err) {
console.log(err);
}
// 输出读取的字节
if (bytes > 0) {
console.log(buf.slice(0, bytes).toString());
}
// 关闭文件
fs.close(fd, (err) => {
if (err){
console.log(err);
}
console.log("文件已关闭。");
});
});
});
在代码中,我们使用了 fs 模块的 open 方法打开一个名为 'input.txt' 的文件,并使用 fs.read 方法从文件中读取数据,调用函数的参数依次为:文件描述符、缓冲区对象、读取字节长度、读取起点、回调函数;最后通过 fs.close 方法关闭文件。在控制台中运行代码时,我们可以看到读取文件内容的输出。
通过以上对 Buffer 模块的讲解,我们可以看出,它在后端编程中很有用,尤其在处理流数据和网络传输等方面都有很多应用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:NodeJS中Buffer模块详解 - Python技术站