IO流概述
Java IO 流详解
IO(Input/Output,输入/输出)流 是 Java 处理数据读取和写入的基础,广泛用于文件操作、网络通信、数据传输等场景。Java 的 IO 主要分为 字节流 和 字符流,并且提供了 缓冲流、数据流、对象流 等高级流来提高效率和扩展功能。
✅ 1. Java IO 流的基本分类
Java 的 IO 流可以从不同维度进行分类:
按数据类型分类
流类型 | 作用 | 常用类 |
---|---|---|
字节流 | 以 字节(8bit) 方式操作数据,适用于所有类型文件(文本、图片、视频) | InputStream / OutputStream |
字符流 | 以 字符(16bit) 方式操作数据,适用于文本文件(txt、csv、json) | Reader / Writer |
按数据流向分类
方向 | 作用 | 字节流 | 字符流 |
---|---|---|---|
输入流 | 从外部(文件、网络)读数据 | InputStream |
Reader |
输出流 | 向外部(文件、网络)写数据 | OutputStream |
Writer |
✅ 2. 字节流(InputStream / OutputStream)
字节流(Byte Stream) 适用于处理所有类型的数据,如 图片、音频、视频、二进制文件,它不会对数据进行编码转换。
📌 2.1 字节输入流(InputStream)
用于 读取 字节数据,常见的子类有:
FileInputStream
—— 读取文件BufferedInputStream
—— 带缓冲,提高读取效率DataInputStream
—— 读取基本数据类型(int
、double
等)
示例:使用 FileInputStream
读取文件
1 |
|
🔹 read()
方法 每次读取 1 个字节,-1
表示文件读取结束。
📌 2.2 字节输出流(OutputStream)
用于 写入 字节数据,常见的子类有:
FileOutputStream
—— 写入文件BufferedOutputStream
—— 带缓冲,提高写入效率DataOutputStream
—— 写入基本数据类型
示例:使用 FileOutputStream
写入文件
1 |
|
🔹 getBytes()
方法将字符串转换为 字节数组 后写入文件。
✅ 3. 字符流(Reader / Writer)
字符流(Character Stream) 适用于处理 文本文件,它使用 Unicode 编码,自动处理字符编码转换。
📌 3.1 字符输入流(Reader)
用于 读取 字符数据,常见的子类有:
FileReader
—— 读取文件BufferedReader
—— 带缓冲,提高读取效率InputStreamReader
—— 字节流转字符流(可指定编码)
示例:使用 BufferedReader
逐行读取文本
1 |
|
🔹 readLine()
方法每次 读取一整行,比 read()
更高效。
📌 3.2 字符输出流(Writer)
用于 写入 字符数据,常见的子类有:
FileWriter
—— 写入文件BufferedWriter
—— 带缓冲,提高写入效率OutputStreamWriter
—— 字节流转字符流(可指定编码)
示例:使用 BufferedWriter
写入文本
1 |
|
🔹 newLine()
方法写入 换行符,适用于多行文本文件。
✅ 4. 高级 IO 流
除了基本的 InputStream
和 Reader
,Java 还提供了 高级流 以提高性能和扩展功能。
流类型 | 作用 | 常用类 |
---|---|---|
缓冲流 | 提高读写效率 | BufferedInputStream / BufferedReader |
数据流 | 读写基本数据类型(int 、double ) |
DataInputStream / DataOutputStream |
对象流 | 读写对象(序列化) | ObjectInputStream / ObjectOutputStream |
转换流(字节→字符) | 处理不同编码格式的文本 | InputStreamReader / OutputStreamWriter |
示例:对象流(对象序列化与反序列化)
1 |
|
✅ 5. 总结
- 字节流(InputStream / OutputStream):适用于 二进制文件(图片、视频)。
- 字符流(Reader / Writer):适用于 文本文件(txt、json)。
- 缓冲流(BufferedReader / BufferedWriter):提高 IO 性能。
- 对象流(ObjectInputStream / ObjectOutputStream):对象序列化 和 反序列化。
理解这些流的区别和应用场景,可以帮助你更高效地进行文件处理和数据流操作!🚀
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Firefly!