写在前面

用了这么久的Stream类,还没了解过什么是stream以及为何要有stream。

什么是Stream?

stream就是一些等待解释其含义的数据,这些数据通常具有至少一个下面列出的特点:

  • 不要求在处理时全部到达。
  • 数据的到达时机难以确定。
  • 数据是按照一定顺序到达。
  • 数据顺序读写比随机读写效率要高或只能顺序读写。
  • 读取过一次的数据无法再次读取或再次读取时开销很大。

符合上列特点的数据典型的就是在线视频。

stream本身没有含义,它的含义取决于你如何解释。这也就是为什么面向对象语言中会有FileStream,NetworkStream等多种Stream类的派生类,这些类包含了对stream的解释方式。

如果以字节为最小处理单位则称字节流,以一位二进制为最小处理单位则称比特流,以此类推。

目前来说stream已经不单单代表数据了,通常也代表与数据配套的操作。

为什么要有Stream

  • 使得编程更加容易。如果统一使用 stream 模型处理数据,那么对应不同类型的数据只需要用到不同的 stream 处理模块,代码改动较少。
  • 对于在线视频这种业务场景,使用 stream 来处理再好不过了。
    • 视频通过网络传输,即到达时间不确定。
    • 视频只需要加载一部分就能开始播放以提高用户体验,即不要求在处理时全部到达。
    • 视频必须要保证顺序正确,即数据是按照一定顺序到达。
  • 对于较大的数据无需一次性装入内存而是分批次处理。虽然OS提供的分页机制一定程度上缓解了这个问题,但是频繁的缺页会大大降低运行效率。