每日灵魂一问- Node 中 Buffer 的理解

Posted NANA

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日灵魂一问- Node 中 Buffer 的理解相关的知识,希望对你有一定的参考价值。

Buffer

nodejs需要处理网络协议、操作数据库、处理图片、接收上传文件等,在网络流和文件的操作中,要处理大量二进制数据,而Buffer就是用来存放二进制数据的
Buffer与String对等
区别:
字符串是只读的,并且对字符串的任何修改得到的都是一个新字符串,原字符串保持不变;
Buffer,会对原数据进行修改

方法

1.创建Buffer的方法

Buffer.from(array); //返回一个被 array 的值初始化的新的 Buffer 实例

Buffer.alloc(size,fill,encoding); //返回一个指定大小的 Buffer 实例,如果没有设置 fill,则默认填满 0

2.写入缓冲区

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

string - 写入缓冲区的字符串。
offset - 缓冲区开始写入的索引值,默认为 0
length - 写入的字节数,默认为 buffer.length
encoding - 使用的编码。默认为 \'utf8\'

3.从缓冲区读取数据

buf.toString(encoding,start,end)
encoding - 使用的编码。默认为 \'utf8\'
start - 指定开始读取的索引位置,默认为 0
end - 结束位置,默认为缓冲区的末尾。

4.其他方法

buf.toJSON() 将Buffer 转换为 JSON 对象
buf.compare(otherBuffer); 缓存区比较

应用场景

1.I/O操作
通过流的形式,将一个文件的内容读取到另外一个文件

const fs = require(\'fs\');

const inputStream = fs.createReadStream(\'input.txt\'); // 创建可读流
const outputStream = fs.createWriteStream(\'output.txt\'); // 创建可写流

inputStream.pipe(outputStream); // 管道读写

2.加解密
在一些加解密算法中会遇到使用 Buffer

3.zlib.js
zlib.js 为 Node.js 的核心库之一,其利用了缓冲区(Buffer)的功能来操作二进制数据流,提供了压缩或解压功能

以上是关于每日灵魂一问- Node 中 Buffer 的理解的主要内容,如果未能解决你的问题,请参考以下文章

每日灵魂一问-对Node 中的 Stream 的理解?应用场景?

每日灵魂一问-说说你对Node.js 的理解?优缺点?应用场景?

每日灵魂一问-Node性能如何进行监控以及优化?

每日灵魂一问-浅谈node.js中的process

每日灵魂一问nodejs-eventEmitte是啥?手动实现

node.js每日灵魂一问- node.js的fs模块&常用方法