java:io流相关类的继承关系梳理
在Java IO体系中,这些类可大致分为字节流和字符流,并且存在节点流和处理流的区别,以下是它们之间的关系说明:
字节流相关类
1. InputStream 和 OutputStream
- InputStream :是所有字节输入流的抽象基类,定义了诸如 read() 等读取字节数据的方法。
- OutputStream :是所有字节输出流的抽象基类,定义了诸如 write() 等写入字节数据的方法。
2. 节点流
- FileInputStream :用于从文件中读取字节数据,继承自 InputStream 。
- FileOutputStream :用于向文件中写入字节数据,继承自 OutputStream 。
- ByteArrayInputStream :允许从字节数组中读取数据,继承自 InputStream 。
- ByteArrayOutputStream :用于将数据写入字节数组,继承自 OutputStream 。
- PipedInputStream 和 PipedOutputStream :用于线程间通信,成对使用,分别继承自 InputStream 和 OutputStream 。
3. 处理流
- BufferedInputStream :为其他字节输入流提供缓冲功能,提高读取效率,继承自 FilterInputStream ,而 FilterInputStream 继承自 InputStream 。
- BufferedOutputStream :为其他字节输出流提供缓冲功能,继承自FilterOutputStream ,而 FilterOutputStream 继承自OutputStream 。
- DataInputStream :允许从输入流中读取基本数据类型(如 int 、 double 等),继承自 FilterInputStream 。
- DataOutputStream :允许向输出流中写入基本数据类型,继承自 FilterOutputStream 。
- PushbackInputStream :允许将读取的字节推回到输入流中,继承自 FilterInputStream 。
字符流相关类
1. Reader 和 Writer
- Reader :是所有字符输入流的抽象基类,定义了读取字符数据的方法,如 read() 。
- Writer :是所有字符输出流的抽象基类,定义了写入字符数据的方法,如 write() 。
2. 节点流
- FileReader :用于从文件中读取字符数据,继承自 Reader 。
- FileWriter :用于向文件中写入字符数据,继承自 Writer 。
- CharArrayReader :允许从字符数组中读取数据,继承自 Reader 。
- CharArrayWriter :用于将数据写入字符数组,继承自 Writer 。
- StringReader :用于从字符串中读取字符,继承自 Reader 。
- StringWriter :用于将字符写入字符串,继承自 Writer 。
- PipedReader 和 PipedWriter :用于线程间的字符数据通信,分别继承自 Reader 和 Writer 。
3. 处理流
- BufferedReader :为字符输入流提供缓冲,并且提供了如 readLine() 等便捷方法,继承自 Reader 。
- BufferedWriter :为字符输出流提供缓冲,继承自 Writer 。
- FilterReader 和 FilterWriter :是字符处理流的抽象基类,其他一些特定功能的字符处理流(如 PushbackReader 等)继承自它们 。
- InputStreamReader :将字节输入流转换为字符输入流,继承自 Reader ,可以指定字符编码。
- OutputStreamWriter :将字节输出流转换为字符输出流,继承自 Writer ,可以指定字符编码。
- LineNumberReader :扩展了 BufferedReader ,可以跟踪行号,常用于读取文本文件时获取行号信息。
其他类
- RandomAccessFile :既不是 InputStream 的子类,也不是 OutputStream 的子类,它独立于标准的IO继承体系,用于随机访问文件,可以在文件的任意位置进行读写操作。