-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
面试官:说说对 Node 中的 Buffer 的理解?应用场景? #164
Comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
一、是什么
在
Node
应用中,需要处理网络协议、操作数据库、处理图片、接收上传文件等,在网络流和文件的操作中,要处理大量二进制数据,而Buffer
就是在内存中开辟一片区域(初次初始化为8KB),用来存放二进制数据在上述操作中都会存在数据流动,每个数据流动的过程中,都会有一个最小或最大数据量
如果数据到达的速度比进程消耗的速度快,那么少数早到达的数据会处于等待区等候被处理。反之,如果数据到达的速度比进程消耗的数据慢,那么早先到达的数据需要等待一定量的数据到达之后才能被处理
这里的等待区就指的缓冲区(Buffer),它是计算机中的一个小物理单位,通常位于计算机的
RAM
中简单来讲,
Nodejs
不能控制数据传输的速度和到达时间,只能决定何时发送数据,如果还没到发送时间,则将数据放在Buffer
中,即在RAM
中,直至将它们发送完毕上面讲到了
Buffer
是用来存储二进制数据,其的形式可以理解成一个数组,数组中的每一项,都可以保存8位二进制:00000000
,也就是一个字节例如:
其存储过程如下图所示:
二、使用方法
Buffer
类在全局作用域中,无须require
导入创建
Buffer
的方法有很多种,我们讲讲下面的两种常见的形式:Buffer.from()
Buffer.alloc()
Buffer.from()
Buffer.alloc()
在上面创建
buffer
后,则能够toString
的形式进行交互,默认情况下采取utf8
字符编码形式,如下如果编码与解码不是相同的格式则会出现乱码的情况,如下:
当设定的范围导致字符串被截断的时候,也会存在乱码情况,如下:
所支持的字符集有如下:
三、应用场景
Buffer
的应用场景常常与流的概念联系在一起,例如有如下:I/O操作
通过流的形式,将一个文件的内容读取到另外一个文件
加解密
在一些加解密算法中会遇到使用
Buffer
,例如crypto.createCipheriv
的第二个参数key
为string
或Buffer
类型zlib.js
zlib.js
为Node.js
的核心库之一,其利用了缓冲区(Buffer
)的功能来操作二进制数据流,提供了压缩或解压功能参考文献
The text was updated successfully, but these errors were encountered: