JDK IO层次体系结构研究

构成部分

     流式 部 分:IO的主体部分(字节流、字符流输出、输出处理);

    非流式部分主要一些辅助流式部分的类,如File类、RandomAccessFile类和FileDescriptor等类,File提供了描述文件和目录的操作与管理方法用来管理磁盘文件与目录。

    其  他 类文件相关的安全操作系统相关的文件系统的类,如FileSystem类和Win32FileSystem类和WinNTFileSystem类。

IO流的体系结构如图

                    

输入字节流(InputStream 

  分析过程关系图

   

          InputStream抽象类

              

   read()公共抽象方法需在InputStream 6个具体子类内去实现,其它方法将会被子类重载。

  InputStream 4个子类基本上保持实现read()方法并重载其它方法,除开ObjectInputStreamFilterInputStream子类。ObjectInputStream子类采用适配模式,扩展InputStream 同时还实现ObjectInputinterface 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 textOutOutputStreamWriter 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 outPrintStream psOut两对象.

输入Reader字符流

   分析过程关系图

     

       Reader抽象类:

               

 设 计思想同输出字符流几乎一致。


猜你喜欢

转载自blog.csdn.net/jun55xiu/article/details/79286039
jdk