Java I/O的的架构使用了装饰器的模式,我们在使用流的时候需要新建很多的装饰器对象,对源数据进行层层包装。各个包装类名以及它们的应用场景比较多,初学的时候难以摸清规律,这里我把它们归一下类,方便大家记忆。
InputStream
与 OuputStream
是 Java 中 I/O 操作中最基本的类。
先上类图:
InputStream.jpg
类图中的类大致可以分为三个部分。
ByteArrayInputStream
, StringBufferInputStream
, FileInputStream
, PipedInputStream
, SequenceInputStream
。他们的构造参数各不相同,对应的数据源也各不相同。DataInputStream
, BufferedInputStream
。其中DataInputStream
允许我们读取其它基本类型数据, BufferedInputStream
使用了缓存,可以提高读取的效率。类图:
OutputStream.jpg
与InputStream类似, 它也可以分为三部分:
ByteArrayOutputStream
, FileOutputStream
, PipedOutputStream
。它们分别将数据写入到内存区域,文件,管道中。DataOutputStream
, PrintStream
, BufferedOuputStream
, 他们的功能分别是写入基本类型, 写入换行符并清空缓存,提供了写入的目标的缓存。InputStream
& OutputStream
的重要缺陷在于不能支持Unicode。所以,Java 1.1版本中,Java I/O库中添加了这两个重要的类专门用来处理字符读写。
类图:
Reader.jpg
与InputStream
的架构类似,某些继承的顺序可能略有不同。
InputStream
的操作是类似的, 只是Reader
是针对字符的。InputStream
相比多了一个InputStreamReader
, 它可以从一个InputStream
构造一个Reader
。InputStream
的读入格式类似,多了可以读入字符床的操作。类图:
Writer.jpg
OuputStream
类似,针对字符,多了append
操作OutputStreamWriter
,允许我们通过OutputStream
构造Writer
。RandomAccessFile
是一个独立的类与I/O,R/W 无关。它相当于把InputStream
与OutputStream
结合起来使用。并添加了一些位置相关的新操作。
类图:
RandomAccessFile.jpg