打一个小广告,作者本人开发的一个集合优质编程教程与视频的网站(包含大量慕课网体系课与实战课),感兴趣的同学可以看一下,青苹网 www.qingp.net
在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数据,也就是读取出来的就是放在内存缓冲区的二进制数据。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。