Java-IO之总框架

在Java IO中我们会经常提到 输入流输出流,流是一种抽象的数据总称,本质是能够进行数据的传输。按照流的方向分为: 输入流输出流。按照流中处理数据的单位,可以将其区分为: 字节流字符流。在Java中,字节就是1个Byte,8位,而字符是占2个Byte,16位,字节是有符号类型,字符是无符号类型的。
接下来 分别讨论输入流、输出流、字节流和字符流

一、以字节为单位的输入流的框架图:

从上图我们可以看出以字节为单位的输入流的 公共父类是InputStream
(1)InputStream是以字节为单位的输入流的超类, InputStream提供了接口从输入流中读取字节数据
(2)ByteArrayInputStream是 字节数组输入流,它的内部缓冲区是一个 字节数组,本质是通过字节数组来是实现的。
(3)PipedInputStream是管道输入流,能够实现 多线程间的管道通信
(4)FilterInputStream是过滤输入流,它是DataInputStream和BufferedInputStream的超类。
(5)DataInputStream是数据输入流,用来装饰其他输入流,允许应用程序以与机器无关方式从底层输入流中读取基本Java数据类型。
(6)BufferedInputStream是 缓冲输入流,作用是为另一个输入流添加缓冲功能。
(7)FileInputStream是文件输入流,通常用于对文件进行读取操作。
(8)File是文件和目录路径名的抽象表示形式,File不仅仅表示文件,也可以表示目录,它的超类是Object。
(9)FileDescriptor是文件描述符,用来表示开放文件,开放套接字等。
(10)ObjectInputStream是对象输入流,和ObjectOutputStream一起来对基本数据或对象进行持久存储。

二、以字节为单位的输出流的框架图:


从中我们可以看出,以字节为单位的输出流的公共父类是OutputStream:
(1)OutputStream是以字节为单位的输出流的超类,提供了write()函数从输出流中读取字节数据。
(2)ByteArrayOutputStream是 字节数组输出流,写入ByteArrayOutputStream的数据被写入到一个byte数组,缓冲区会随着数据的不断写入而自动增长,可使用toByteArray()和toString()获取数据。
(3)PipedOutputStream是 管道输出流,和PipedInputStream一起使用,能实现多线程间的管道通信。
(4)FilterOutputStream是 过滤输出流,是DataOutputStream,BufferedOutputStream和PrintStream的超类
(5)DataOutputStream是 数据输出流,用来装饰其他的输出流,允许应用程序以与机器无关方式向底层写入基本Java数据类型。
(6)BufferedOutputStream是 缓冲输出流,它的作用是为另一个输出流添加缓冲功能。
(7)PrintStream是 打印输出流,用来装饰其他输出流,为其他输出流添加功能,方便的打印各种数据值
(8)FileOutputStream是 文件输出流,通常用于向文件进行写入操作。
(9)ObjectOutputStream是 对象输出流,它和ObjectInputStream一起对基本数据或者对象的持久存储。

三、以字节为单位的输入流和输出流关联的框架图
       输入流和输出流都有对应的关系,如图:


四、以字符为单位的输入流的框架图:


从图我们可以看出,以字符为单位的输入流的公共类是Reader。
(1)Reader是 以字符为单位的输入流的超类,它提供了read()接口来取字符数据。
(2)CharArrayReader 是 字符数组输入流,用于读取字符数组,继承于Reader。操作的数据是以字符为单位。
(3)PipedReader 是 字符类型的管道输入流,它和PipedWriter一起可以 通过管道进行进程间的通讯,在使用管道通信时,必须将PipedWriter和PipedReader配套使用。
(4)FilterReader是字符类型的过滤输入流。
(5)BufferedReader是 字符缓冲输入流,作用是为另一个输入流 添加缓冲功能
(6)InputStreamReader是 字节转字符的输入流,它是 字节流通向字符流的桥梁
(7)FileReader是字符类型的文件输入流,通常用于对文件进行读取操作。

五、以字符为单位的输出流的框架图:

从图中可以看出,Writer是所有字符输出流的超类。
(1)Writer是以字符为单位的 输出流的超类,它提供了writer()函数,进行对字符的写。
(2)CharArrayWriter是字符数组输出流,用于读取字符数组,继承于Writer,操作数据的单位是字符。
(3)PipedWriter是字符类型的管道输出流,它和PipedReader一起是可以通过管道进行线程间的通讯,在使用管道通信时,必须将PipedReader和PipedWriter配套使用。
(4)FilterWriter是字符类型的过滤输出流。
(5)BufferedWriter是字符缓冲输出流,作用是为另一个输出流添加缓冲功能。
(6)OutStreamWriter是字节转字符的输出流,是字节通向字符流的桥梁。
(7)FileWriter 是字符类型的文件输出流。
(8)File,获取文件或者目录对象
(9)PrintWriter是字符类型的打印输出,用来装饰其他输出流,能为其他的输出流添加功能。

六、以字符为单位的输入流和输出流关联的框架图:

七、字节转换为字符流的框架图
在java中,字节流能转换为字符流,转换关系图

从上图可以看出:
(1)FileReader继承于InputStreamReader,而InputStreamReader依赖于InputStream,因为InputStreamReader的构造函数是以InputStream为参数,传人InputStream会在InputStreamReader内部通过转码,将字节转换成字符。
(2)FileWriter继承于OutputStreamWriter,而OutStreamWriter依赖于OutputStream,因为OutputStreamWriter的构造函数是以OutputStream为参数,我们传人OutputStream会在OutputStreamWriter内部通过转码,将字节转换成字符。

八、字节和字符的输入流对应关系:


九、字节和字符的输出流对应关系



转载:https://blog.csdn.net/qq924862077/article/details/52687487


猜你喜欢

转载自blog.csdn.net/oqkdws/article/details/80252917