1、输入输出的来源和目的地
基类:InputStream, OutputStream
不同的来源和目的地派生了以下几个子类:
AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream ByteArrayOutputStream, FileOutputStream, FilterOutputStream, ObjectOutputStream, OutputStream, PipedOutputStream
FilterInputStream\FilterOutputStream (这个有点特殊,下面再讲述)
2、更方便的读写数据,InputStream, OutputStream是比较原生的数据IO,如果我们想要更方便的读写数据,比如缓存、读写整形、浮点等,我们需要在此基础上进行一些扩展,加一些修饰,所有的这些修饰的基类就是FilterInputStream, FilterOutputStream。
子类有:
BufferedInputStream, CheckedInputStream, CipherInputStream, DataInputStream, DigestInputStream, InflaterInputStream, LineNumberInputStream, ProgressMonitorInputStream, PushbackInputStream
BufferedOutputStream, CheckedOutputStream, CipherOutputStream, DataOutputStream, DeflaterOutputStream, DigestOutputStream, PrintStream
在创建这些类时,我们需要将InputStream, OutputStream对象与其关联,也即为修饰提供源。
但是我们发现FilterInputStream, FilterOutputStream本身也是继承InputStream, OutputStream的,我猜想这是为了方便对于修饰再进行一层修饰。
比如BufferedInputStream只是标识对输入进行缓冲,没有什么特别的接口,因此一般将其对象再用DataInputStream修饰。