Java 中的 IO 流的分类?说出几个你熟悉的实现类?
参考回答
Java 中的 IO 流分类:
- 按流的方向分类
- 输入流(InputStream/Reader):用于从外部读取数据到程序中。
- 输出流(OutputStream/Writer):用于将数据从程序中写出到外部。
- 按处理数据的单位分类
- 字节流(InputStream/OutputStream):以字节(8 位)为单位处理数据,适合处理图片、视频、音频等二进制文件。
- 字符流(Reader/Writer):以字符(16 位)为单位处理数据,适合处理文本文件。
- 按功能分类
- 节点流:直接操作数据源或目的地,例如文件、内存、网络等。
- 处理流:对已有流进行功能增强或数据处理,例如缓冲、转换、压缩等。
常见的实现类:
- 字节流
- 输入流:
FileInputStream
、BufferedInputStream
- 输出流:
FileOutputStream
、BufferedOutputStream
- 输入流:
- 字符流
- 输入流:
FileReader
、BufferedReader
- 输出流:
FileWriter
、BufferedWriter
- 输入流:
- 特殊流
- 对象流:
ObjectInputStream
、ObjectOutputStream
- 数据流:
DataInputStream
、DataOutputStream
- 转换流:
InputStreamReader
、OutputStreamWriter
- 对象流:
详细讲解与拓展
1. IO 流的四大核心基类
- 字节流:
InputStream
:所有字节输入流的超类。OutputStream
:所有字节输出流的超类。
- 字符流:
Reader
:所有字符输入流的超类。Writer
:所有字符输出流的超类。
关系图:
InputStream ────> FileInputStream, BufferedInputStream, ObjectInputStream
OutputStream ────> FileOutputStream, BufferedOutputStream, ObjectOutputStream
Reader ────> FileReader, BufferedReader, InputStreamReader
Writer ────> FileWriter, BufferedWriter, OutputStreamWriter
2. 字节流的实现类
字节流适合处理 二进制数据,如图片、视频、音频等。
FileInputStream
和FileOutputStream
:- 用于从文件中读取或向文件中写入字节数据。
-
示例:
-
BufferedInputStream
和BufferedOutputStream
:- 对字节流提供缓冲功能,提高 IO 操作效率。
-
示例:
3. 字符流的实现类
字符流适合处理 文本数据,如 .txt
文件。
FileReader
和FileWriter
:- 用于从文件中读取或向文件中写入字符数据。
-
示例:
-
BufferedReader
和BufferedWriter
:- 对字符流提供缓冲功能,并支持按行读写。
-
示例:
4. 特殊流的实现类
-
ObjectInputStream
和ObjectOutputStream
:- 用于序列化和反序列化对象。
-
示例:
-
InputStreamReader
和OutputStreamWriter
:-
用于字节流与字符流之间的转换。
-
示例:
-
总结
分类总览
分类方式 | 类型 | 代表基类 | 常见实现类 |
---|---|---|---|
流方向 | 输入流 | InputStream |
FileInputStream ,BufferedInputStream |
输出流 | OutputStream |
FileOutputStream ,BufferedOutputStream |
|
输入流 | Reader |
FileReader ,BufferedReader |
|
输出流 | Writer |
FileWriter ,BufferedWriter |
|
处理单位 | 字节流 | InputStream /OutputStream |
FileInputStream ,FileOutputStream |
字符流 | Reader /Writer |
FileReader ,FileWriter |
|
功能 | 节点流 | – | FileInputStream ,FileReader |
处理流 | – | BufferedInputStream ,BufferedReader |