Node.js Buffer(缓冲区)


Node.js Buffer是Node.js中用于处理二进制数据的机制,它是一个全局的类,可以使用该类的构造函数创建一个Buffer实例对象。Buffer类是Node.js核心模块之一,与操作系统无关,也不需要经过V8的垃圾回收机制来管理内存,因此处理大量数据时,会比JavaScript使用数组高效。

创建Buffer

Buffer可以通过多种方式创建,比如使用构造函数,数组,字符串等。

使用构造函数创建

const buf = new Buffer.alloc(size);

size: 表示Buffer的长度,单位为字节。

使用数组创建

const buf = new Buffer.from(Array);

使用字符串创建

const buf = new Buffer.from(String);

Buffer的常用方法

Buffer.from(string, [encoding])

用于将字符串转换成Buffer实例。第二个参数为编码格式,默认为’utf8’。

const buf = Buffer.from('test string', 'utf-8');

Buffer.alloc(size[,fill[,encoding]])

用于创建一个指定大小的Buffer实例,fill为填充Buffer的初始值,默认为0。

const buf = Buffer.alloc(10);
console.log(buf); // <Buffer 00 00 00 00 00 00 00 00 00 00>

buf.toString([encoding][, start][, end])

用于将Buffer实例转换成字符串。第一个参数为编码格式,默认为’utf8’。

const buf = Buffer.from('test string', 'utf8');
console.log(buf.toString('utf8')); // 'test string'

buf.write(string[, offset[, length]][, encoding])

用于向Buffer中写入数据,第一个参数为要写入的字符串,第二个参数为写入的偏移量,第三个参数为写入字节数,第四个参数为编码格式,默认为’utf8’。

const buf = Buffer.alloc(10);
buf.write('hello world');
console.log(buf.toString()); // 'hello wor'
buf.write('world', 6);
console.log(buf.toString()); // 'hello world'

buf.slice([start][,end])

用于切割Buffer实例,返回一个新的Buffer实例,第一个参数为切割的开始位置,第二个参数为结束位置,不传参数会返回一个与原Buffer长度相同的新Buffer实例。

const buf1 = Buffer.from('hello world');
const buf2 = buf1.slice(0,5);
console.log(buf2.toString()); // 'hello'

Buffer的应用场景

Socket编程

当进行Socket编程时,需要将数据进行二进制格式的传输。

文件的二进制数据读取和操作

Buffer可以对文件的二进制数据进行高效的操作。

图片的处理

对于图片,都是二进制格式的数据,通过Buffer可以方便地对图片进行处理。

总而言之,Buffer对于二进制数据的处理是非常高效且方便的,但需要注意的是,Buffer仅支持固定长度的操作,一旦创建后就不能改变长度,同时需要谨慎使用Buffer,避免内存泄漏。