关于数据流
=====
在数据输入输出描述中,我们抽象出了一个概念叫做流Stream, 简单数来就是从一个点到另外一个点的数据有序流动,或者说是一个任意长度的有序字节序列。
在Java编程中,我们为了更好的管理数据流动,将流分为输入流和输出流,并抽象了两个接口定义InputStream和OutputStream来分别描述它们。
因为我们计算机底层对于数据处理的基本单位是字节byte,所以我们数据流的基本单元也是比特,我们也称这样的数据流为字节流。
每个数据流都有两个端点,分别为数据源和数据目的地。通常它们可以是文件,网络数据流等。
很多小伙伴在学习Java编程时,很容易被I/O这部分的一些列概念定义搞混了。因为所有的数据流都是以字节流为基础根据各类数据类型的定义进行的编码处理后的结果。
在理解Java的I/O类型时,需要先了解一个设计模式,那就是装饰器模式。
简单来说,装饰器模式是通过一个基础的接口来描述所有接口约定,然后用基础实现类和附加实现类结合共同实现该接口,如此一来我们就可以保留原有接口实现的功能,并且能够通过实现类来提供附加处理功能,并提供统一的对外接口。
Java的输入输出流类型定义就遵循的这一模式,数据流的基础实现ByteInputStream和ByteOutputStream作为基础类,增加了继承继承接口的过滤功能接口和缓冲功能接口,通过它们的实现类我们可以对本来只能处理单个字节的数据流类变为可以通过特定缓冲区来缓存一定数量的字节后进行处理的BufferStream以及缓存后对整体数据添加条件过滤的BufferFilterStream。
进而我们根据各种数据类型的编码规则,对基础的字节流进行编解码处理,定义出了字符,整