前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第七十八期:关于buffer的思考

第七十八期:关于buffer的思考

作者头像
terrence386
发布2022-07-15 10:54:49
2260
发布2022-07-15 10:54:49
举报

关于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的一个场景吧。

尤其是一些音视频的推流和拉流的过程,这个没接触过,就不说了。

然后在找的过程当中看到了一个概念,叫:渐进式笔记。回头琢磨琢磨这个东西。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JavaScript高级程序设计 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
媒体处理
媒体处理(Media Processing Service,MPS)是一种云端音视频处理服务。基于腾讯多年音视频领域的深耕,为您提供极致的编码能力,大幅节约存储及带宽成本、实现全平台播放,同时提供视频截图、音视频增强、内容理解、内容审核等能力,满足您在各种场景下对视频的处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档