共计 1047 个字符,预计需要花费 3 分钟才能阅读完成。
在 node 中,buffer 意思为“缓冲区”,buffer 精确说是放在缓冲区里的二进制数据。
这里有一个缓冲区的概念。
缓冲区是内存空间的一部分,在内存空间中预留了肯定的存储空间来寄存 IO 输出和输入的数据。计算机之所以要弄一个缓冲区,是为了在 IO 过程均衡不同 IO 介质的速度差。
诸如往要写入一段数据到磁盘中,计算机会先将数据写入到内存缓冲区中暂存,要么数据曾经写完,要么缓冲区已写满,此时 cpu 就会把缓冲区的中的数据,一次性写入到磁盘中。
为什么要这样做?如果要写入的一段数据,一共有 10 个数据块。同时假如,cpu 把数据写入到内存缓冲区是 1 秒,而把数据写入到磁盘中是 10 秒。
那么,依照缓冲区的机制,十块数据写到内存缓冲区中一共要 10 秒,而后 cpu 把内存缓冲区的中数据写入磁盘破费 10 秒,那么这一段数据最终写入到存储介质中,一共花了 20 秒。而如果没有内存缓冲区,每一块数据都由 CPU 间接写入到磁盘的话,每一次写入时是 10 秒,那么十块数据共十次写入磁盘,那么这段数据写入存储介质中一共破费了 100 秒。这样的区别是不言而喻的,破费 100 秒就齐全拖慢了 cpu 让它不能去干别的事件了。
从实质上讲,这是因为这一段数据(比方说是一个文件),它不可能被 cpu 一次就把整个文件的数据读出来,如果这样能够的话,那么一次读取进去了整个文件数据,而后间接只一次写入到磁盘,那这样只有 10 秒,这当然好,但这样平步青云的事件是不可能的,cpu 是不可能一次取出整个文件数据的,它必定是要一点一点去读,也要一点一点去写,它总得有一个过程。
缓冲区是与 IO 间接关联的,正是因为有网络 IO,磁盘 IO,才有缓冲区的存在。
在过来的 js 中,js 是为浏览器而生的,在浏览器中,js 自身是没有 IO 操作的,js 发什么 ajax 申请、抉择文件上传,看起来 js 有 IO 操作,实际上这都是由浏览器本身底层代码在操作系统上实现,js 自身是没有 IO 的,因为没有 IO 所以过来的 js 也没有二进制数据的示意和解决计划。而到了 node 这里,node 就相当于是浏览器底层了,间接和操作系统打交道,而浏览器的 js,只是在和浏览器打交道,浏览器再和操作系统打交道。
node 中不论是读数据还是写数据,不论这个数据是来自还是去向网络还是磁盘,这些 IO 操作的数据都在内存缓冲区中直达。node 因为要解决这些网络、磁盘等 IO 操作,这些 IO 操作都是二进制数据,因而 node 减少了 Buffer 类型。
node 读取进去的文件默认就是 buffer 数据,也就是读取进去的就是放在内存缓冲区的二进制数据。