首页技术文章正文

什么是文件流?Stream文件流有几种类型?

更新时间:2022-07-08 来源:黑马程序员 浏览量:

IT培训班

通过前面的前端培训学习可知,Node,js的 File System模块并没有提供一个copy 的方法,但是通过读取文件和写入文件的方式可以实现,即把文件A的内容全部读入Bufer缓冲区,然后再从缓冲区读出写入文件B,该过程的执行流程图如图1所示。


1657266755117_61.png

图1文件流复制过程

在图1中,可以看判读取数烟需要存放到Batfer 级冲区中,然后在从级冲区读出写入到文件,Bulfer缓冲区限制在1GB,这样的慢作对于小型的文本文件,没有多大的问题,但是对于体积较大的文件,比如音颊、视频文件,动辄几G字节大小,如果使用这种方法,很容易使内存“爆仓”,理想的方法应该是读一部分,写一部分,不管文件有多大,只要时间允许,总会处理完成,这里就需要用到流的概念,文件复制操作使用文件流的读/写机制进行会防止“爆仓”现象的出现,流程如图2所示。
1657273043301_62.png
在图2中可以看到,文件A中数据以流动的形式通过数据流管道,然后进入到文件B中,采用“读一部分,写一部分”的方式。流的好处是接收方可以提前处理,缩短等待时间,提高速度。例如,在网络上观看视频,并不是整个视频下载好了才播放的,而是下一点播一点。

在Node.js中,文件流的操作由Stream模块提供,Stream是一个抽象接口,Node.js中还有很多对象实现了这个接口。例如,对HTTP服务器发起请求的request对象就是一个Stream,还有stdout(标准输出)等。

Node.js中,Stream有4种流类型:

(1)Readable:可读操作(可读流)。

(2)Writable:可写操作(可写流)。

(3)Duplex:可读可写操作(双向流、双工流)。

(4)Transform:操作被写入数据,然后读出结果(变换流)。

在Node.js 中,很多模块涉及流的读/写,例如,HTTP requests and responses、Standard input/output、File reads and writes。Node.js中的I/O是异步的,因此对磁盘和网络的读/写需要通过回调函数来读取数据,而回调函数需要通过事件来触发,所有的Stream对象都是EventEmitter(事件触发器)的实例。常用的事件如表3所示。
1657273685430_63.png





猜你喜欢:

字节流与字符流之间如何实现转换?

怎样执行for循环语句?for循环语句执行流程

Node.js模块化重写计算器案例

黑马程序员前端与移动开发培训

分享到:
在线咨询 我要报名
和我们在线交谈!