构成部分
流式 部 分:IO的主体部分(字节流、字符流输出、输出处理);
非流式部分:主要为一些辅助流式部分的类,如File类、RandomAccessFile类和FileDescriptor等类,File类提供了描述文件和目录的操作与管理方法,用来管理磁盘文件与目录。
其 他 类:文件相关的安全和操作系统相关的文件系统的类,如FileSystem类和Win32FileSystem类和WinNTFileSystem类。
IO流的体系结构如图
输入字节流(InputStream)
分析过程关系图
InputStream抽象类
read()公共抽象方法需在InputStream 6个具体子类内去实现,其它方法将会被子类重载。
InputStream 4个子类基本上保持实现read()方法并重载其它方法,除开ObjectInputStream和FilterInputStream子类。ObjectInputStream子类采用适配模式,扩展InputStream 同时还实现ObjectInput、interface DataInput两父类接口方法,扩展类方法,如来自ObjectInput:
DataInput:
FilterInputStream 子类采用装饰模式, 扩展 InputStream 父类同时,定义父类对象即 protected volatile InputStream in; 将重载 InputStream 父类中方法通过绑定 InputStream in 对象进行转向、延迟实现,即在 InputStream 其它 5 大子类或 FilterInputStream3 大子类中去再次实现,代码片断:
Public class FilterInputStream extends InputStream {
protected volatile InputStream in;
protected FilterInputStream(InputStream in) {this.in = in;}
public int read() throws IOException {return in.read(); }
.....}
FilterInputStream3大子类
输出字节流OutputStream
分析过程关系图
OutputStream抽象类
设计思想同输入字节流几乎一致,注意PrintStream子类定义了私有的BufferedWriter textOut和OutputStreamWriter charOut对象,作为载体对象接收数据的写入方法。
输出Writer 字符流分析过程关系图
Writer 字符流抽象类:
在构造函数和write等方法中引入同步锁synchronized (lock),抽象方法abstract public void write(char cbuf[], int off, int len)需要在子类中实现。特殊子类:OutputStreamWriter类定义private final StreamEncoder se,将父类方法实现载入StreamEncoder 对象;
FilterWriter为抽象类,定义Writer out,将父类方法实现绑定在Writer对象进行转向、延迟实现;PrintWriter类定义Writer out和PrintStream psOut两对象.
输入Reader字符流分析过程关系图
Reader抽象类: