Java基础整理之JavaIO

1. 以字节为单位的输入流的框架图

下面,是以字节为单位的输入流的框架图。


从中,我们可以看出。
(01) InputStream
是以字节为单位的输入流的超类。InputStream提供了read()接口从输入流中读取字节数据。
(02) ByteArrayInputStream
是字节数组输入流。它包含一个内部缓冲区,该缓冲区包含从流中读取的字节;通俗点说,它的内部缓冲区就是一个字节数组,而ByteArrayInputStream本质就是通过字节数组来实现的。
(03) PipedInputStream
是管道输入流,它和PipedOutputStream一起使用,能实现多线程间的管道通信。
(04) FilterInputStream
是过滤输入流。它是DataInputStreamBufferedInputStream的超类。
(05) DataInputStream
是数据输入流。它是用来装饰其它输入流,它允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型
(06) BufferedInputStream
是缓冲输入流。它的作用是为另一个输入流添加缓冲功能。
(07) File
文件目录路径名的抽象表示形式。关于File,注意两点:
a), File
不仅仅只是表示文件,它也可以表示目录!
b), File
虽然在io保重定义,但是它的超类是Object,而不是InputStream
(08) FileDescriptor
文件描述符。它可以被用来表示开放文件、开放套接字等。
(09) FileInputStream
是文件输入流。它通常用于对文件进行读取操作。
(10) ObjectInputStream
是对象输入流。它和ObjectOutputStream一起,用来提供对基本数据或对象的持久存储。

2. 以字节为单位的输出流的框架图

下面,是以字节为单位的输出流的框架图。


从中,我们可以看出。以字节为单位的输出流的公共父类是OutputStream
(01) OutputStream
是以字节为单位的输出流的超类。OutputStream提供了write()接口从输出流中读取字节数据。
(02) ByteArrayOutputStream
是字节数组输出流。写入ByteArrayOutputStream的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() toString() 获取数据。
(03) PipedOutputStream
是管道输出流,它和PipedInputStream一起使用,能实现多线程间的管道通信。
(04) FilterOutputStream
是过滤输出流。它是DataOutputStreamBufferedOutputStreamPrintStream的超类。
(05) DataOutputStream
是数据输出流。它是用来装饰其它输出流,它允许应用程序以与机器无关方式向底层写入基本 Java 数据类型
(06) BufferedOutputStream
是缓冲输出流。它的作用是为另一个输出流添加缓冲功能。
(07) PrintStream
是打印输出流。它是用来装饰其它输出流,能为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。
(08) FileOutputStream
是文件输出流。它通常用于向文件进行写入操作。

(09) ObjectOutputStream 是对象输出流。它和ObjectInputStream一起,用来提供对基本数据或对象的持久存储。

3. 以字节为单位的输入流和输出流关联的框架图

输入流和输出流都有对应的关系,上面是将以字节为单位的输入流和输出流关联起来的图片。

4. 以字符为单位的输入流的框架图

下面,是以字符为单位的输入流的框架图。


从中,我们可以看出。以字符为单位的输入流的公共父类是Reader
(01) Reader
是以字符为单位的输入流的超类。它提供了read()接口来取字符数据。
(02) CharArrayReader
是字符数组输入流。它用于读取字符数组,它继承于Reader。操作的数据是以字符为单位!
(03) PipedReader
是字符类型的管道输入流。它和PipedWriter一起是可以通过管道进行线程间的通讯。在使用管道通信时,必须将PipedWriterPipedReader配套使用。
(04) FilterReader
是字符类型的过滤输入流。
(05) BufferedReader
是字符缓冲输入流。它的作用是为另一个输入流添加缓冲功能。
(06) InputStreamReader
是字节转字符的输入流。它是字节流通向字符流的桥梁:它使用指定的charset 读取字节并将其解码为字符。

(07) FileReader 是字符类型的文件输入流。它通常用于对文件进行读取操作。

5. 以字符为单位的输出流的框架图

下面,是以字符为单位的输出流的框架图。


(01) Writer 是以字符为单位的输出流的超类。它提供了write()接口往其中写入数据。
(02) CharArrayWriter 是字符数组输出流。它用于读取字符数组,它继承于Writer。操作的数据是以字符为单位!
(03) PipedWriter 是字符类型的管道输出流。它和PipedReader一起是可以通过管道进行线程间的通讯。在使用管道通信时,必须将PipedWriter和PipedWriter配套使用。
(04) FilterWriter 是字符类型的过滤输出流。
(05) BufferedWriter 是字符缓冲输出流。它的作用是为另一个输出流添加缓冲功能。
(06) OutputStreamWriter 是字节转字符的输出流。它是字节流通向字符流的桥梁:它使用指定的 charset 将字节转换为字符并写入。
(07) FileWriter 是字符类型的文件输出流。它通常用于对文件进行读取操作。

(08) PrintWriter 是字符类型的打印输出流。它是用来装饰其它输出流,能为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。

6. 以字符为单位的输入流和输出流关联的框架图

下面是将以字符为单位的输入流和输出流关联起来的图片。


7. 字节转换为字符流的框架图

java中,字节流能转换为字符流,下面是它们的转换关系图。


从中,我们可以看出。
(01) FileReader
继承于InputStreamReader,而InputStreamReader依赖于InputStream。具体表现在InputStreamReader的构造函数是以InputStream为参数。我们传入InputStream,在InputStreamReader内部通过转码,将字节转换成字符。

(02) FileWriter继承于OutputStreamWriter,而OutputStreamWriter依赖于OutputStream。具体表现在OutputStreamWriter的构造函数是以OutputStream为参数。我们传入OutputStream,在OutputStreamWriter内部通过转码,将字节转换成字符。

8. 字节和字符的输入流对应关系

9. 字节和字符的输出流对应关系

本文借鉴于我的大学同学也是我的老师--张亮,谢谢!拿出来分享一波=3=




猜你喜欢

转载自blog.csdn.net/qq_33300026/article/details/79292838