认识Stream
- 什么是流呢?
- 我们的第一反应应该是流水,源源不断的流动;
- 程序中的流也是类似的含义,我们可以想象当我们从一个文件中读取数据时,文件的二进制(字节)数据会源源不断的被读取到我们程序中;
- 而这个一连串的字节,就是我们程序中的流;
- 所以,我们可以这样理解流:
- 是连续字节的一种表现形式和抽象概念;
- 流应该是可读的,也是可写的;
- 在之前学习文件的读写时,我们可以直接通过 readFile或者 writeFile方式读写文件,为什么还需要流呢?
- 直接读写文件的方式,虽然简单,但是无法控制一些细节的操作;
- 比如从什么位置开始读、读到什么位置、一次性读取多少个字节;
- 读到某个位置后,暂停读取,某个时刻恢复读取等等;
- 或者这个文件非常大,比如一个视频文件,一次性全部读取并不合适;
文件读写的Stream
- 事实上Node中很多对象是基于流实现的:
- http模块的Request和Response对象;
- process.stdout对象;
- 官方:另外所有的流都是EventEmitter的实例:源码中的stream的实现(EE:EventEmitter)