更新时间:2022-07-08 来源:黑马程序员 浏览量:
通过前面的前端培训学习可知,Node,js的 File System模块并没有提供一个copy 的方法,但是通过读取文件和写入文件的方式可以实现,即把文件A的内容全部读入Bufer缓冲区,然后再从缓冲区读出写入文件B,该过程的执行流程图如图1所示。
图1文件流复制过程
在图1中,可以看判读取数烟需要存放到Batfer
级冲区中,然后在从级冲区读出写入到文件,Bulfer缓冲区限制在1GB,这样的慢作对于小型的文本文件,没有多大的问题,但是对于体积较大的文件,比如音颊、视频文件,动辄几G字节大小,如果使用这种方法,很容易使内存“爆仓”,理想的方法应该是读一部分,写一部分,不管文件有多大,只要时间允许,总会处理完成,这里就需要用到流的概念,文件复制操作使用文件流的读/写机制进行会防止“爆仓”现象的出现,流程如图2所示。
在图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所示。
【AI设计】北京143期毕业仅36天,全员拿下高薪offer!黑马AI设计连续6期100%高薪就业
2025-09-19【跨境电商运营】深圳跨境电商运营毕业22个工作日,就业率91%+,最高薪资达13500元
2025-09-19【AI运维】郑州运维1期就业班,毕业14个工作日,班级93%同学已拿到Offer, 一线均薪资 1W+
2025-09-19【AI鸿蒙开发】上海校区AI鸿蒙开发4期5期,距离毕业21天,就业率91%,平均薪资14046元
2025-09-19【AI大模型开发-Python】毕业33个工作日,就业率已达到94.55%,班均薪资20763元
2025-09-19【AI智能应用开发-Java】毕业5个工作日就业率98.18%,最高薪资 17.5k*13薪,全班平均薪资9244元
2025-09-19