关于buffer
前端需要处理buffer的情况不多,可以说很少见。但是理解这个概念对我们来说并没有什么坏处。还是那句话,我并不善于去写各种API的具体的使用方法,更多的是去描述我自己的一个思考的过程。因为API我们可以查文档,但是,思考的过程并不是每个人都可以跟你分享的。
就像是我们去读vue的源码一样,虽然代码就在那里,但是写代码的人不跟你讲他的创作思路,那么读这个代码就会是一件非常痛苦的事情。
buffer 从字面意义上可以理解为缓冲器。百度出来的解释如下:
在计算机领域,缓冲器指的是缓冲寄存器,它分输入缓冲器和输出缓冲器两种。前者的作用是将外设送来的数据暂时存放,以便处理器将它取走;后者的作用是用来暂时存放处理器送往外设的数据。有了数控缓冲器,就可以使高速工作的[CPU]与慢速工作的外设起协调和缓冲作用,实现数据传送的同步。由于缓冲器接在数据总线上,故必须具有三态输出功能。
这种解释还是有些抽象不好理解,我们可以用一些具体的事物来理解一下。比如说,我们可以把它理解为汽车的变速箱。汽车要实现变速的功能,需要人去进行换挡,人做了换挡的动作后,这个动作传递到变速箱,变速箱再将这个指令传递给汽车,从而实现换挡变速的功能。
我们也可以将他理解为一个中间商,但是这中间商比较好,不赚差价。假设我们是一个客户,我们需要从服务器上读取某些数据,但是数据量比较大,直接返回的话,可能花费的时间比较多,那么我们有可能会将这个数据交给buffer这个中间商做一下加速处理,然后再返回给用户。
从前端的应用场景来看,个人能想到的也就是文件的上传和下载了。图片以二进制流的形式进行上传,服务端以buffer的形式进行接收进行处理,然后再转成对应的格式。另外就是excel表格的下载,场景理论上也差不多。
JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。这句话似乎有些不妥,因为js中有 ArrayBuffer 这个接口,并且还有dataview视图可以读取二进制数据。并且不用考虑不同平台的字节序问题。
我一直没弄明白ArrayBuffer和dataview在前端的使用场景是什么?找了几篇文章,然后猜测markdown的语法生成的过程有可能用到了这个两个东西。当然仅仅是自己的猜测。
在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。
而在Node中,每当需要处理I/O操作时,就有可能会使用buffer。原始数据存储在 Buffer 类的实例中。一个 Buffer 类似于一个整数数组,但它对应于 V8 堆内存之外的一块原始内存。
简单理解一下就是,我传给服务器一个数据,服务器把这个数据转换成了二进制然后在内存中咔咔咔一顿操作,然后又转换成我想要的数据格式返回给我,并且这个过程非常快。说到这里,我又想到一个场景,音视频处理,这个场景应该是重依赖buffer的一个场景吧。
尤其是一些音视频的推流和拉流的过程,这个没接触过,就不说了。
然后在找的过程当中看到了一个概念,叫:渐进式笔记。回头琢磨琢磨这个东西。
本文分享自 JavaScript高级程序设计 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!