Java 中的流类(Stream Classes)分为字节流和字符流两大类,它们的超类如下:
1. 字节流(Byte Streams)
字节流以字节为单位进行数据的读写,主要用于处理二进制数据(如图片、音频、视频等)。
- 输入流:
InputStream
:- 所有字节输入流的超类。
- 提供了读取字节数据的基本方法,如
read()
、close()
等。 - 常用子类:
FileInputStream
:从文件读取字节。ByteArrayInputStream
:从字节数组读取字节。BufferedInputStream
:带缓冲区的字节输入流。ObjectInputStream
:用于反序列化对象。
- 输出流:
OutputStream
:- 所有字节输出流的超类。
- 提供了写入字节数据的基本方法,如
write()
、close()
等。 - 常用子类:
FileOutputStream
:向文件写入字节。ByteArrayOutputStream
:向字节数组写入字节。BufferedOutputStream
:带缓冲区的字节输出流。ObjectOutputStream
:用于序列化对象。
2. 字符流(Character Streams)
字符流以字符为单位进行数据的读写,主要用于处理文本数据。
- 输入流:
Reader
:- 所有字符输入流的超类。
- 提供了读取字符数据的基本方法,如
read()
、close()
等。 - 常用子类:
FileReader
:从文件读取字符。InputStreamReader
:将字节流转换为字符流。BufferedReader
:带缓冲区的字符输入流。
- 输出流:
Writer
:- 所有字符输出流的超类。
- 提供了写入字符数据的基本方法,如
write()
、close()
等。 - 常用子类:
FileWriter
:向文件写入字符。OutputStreamWriter
:将字符流转换为字节流。BufferedWriter
:带缓冲区的字符输出流。PrintWriter
:提供格式化输出的字符输出流。
流类的继承关系图
InputStream (字节输入流)
|- FileInputStream
|- ByteArrayInputStream
|- BufferedInputStream
|- ObjectInputStream
OutputStream (字节输出流)
|- FileOutputStream
|- ByteArrayOutputStream
|- BufferedOutputStream
|- ObjectOutputStream
Reader (字符输入流)
|- FileReader
|- InputStreamReader
|- BufferedReader
Writer (字符输出流)
|- FileWriter
|- OutputStreamWriter
|- BufferedWriter
|- PrintWriter
示例代码
// 使用字节流读取文件
try (InputStream is = new FileInputStream("example.txt")) {
int data;
while ((data = is.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
// 使用字符流读取文件
try (Reader reader = new FileReader("example.txt")) {
int data;
while ((data = reader.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
总结
- 字节流:
- 超类:
InputStream
(输入)、OutputStream
(输出)。 - 用于处理二进制数据。
- 超类:
- 字符流:
- 超类:
Reader
(输入)、Writer
(输出)。 - 用于处理文本数据。
- 超类:
理解这些超类及其子类的关系,有助于更好地掌握 Java 的 IO 流操作。
THE END
暂无评论内容