🎈边走、边悟🎈迟早会好 |
在 Java 中,IO 流根据不同的分类方式可以分为多种类型,以下是主要的分类及示例:
按数据流的方向:输入流和输出流
输入流用于从源读取数据,输出流用于向目标写入数据。
按处理数据单位:字节流和字符流
字节流以字节(8 位)为单位处理数据,字符流以字符(16 位,支持 Unicode)为单位处理数据。
按功能:节点流和处理流
节点流直接与数据源相连,处理流用于包装节点流以提供增强功能。
主要 IO 流类及其继承关系
- 字节输入流:
InputStream
(抽象基类)→FileInputStream
、BufferedInputStream
等 - 字节输出流:
OutputStream
(抽象基类)→FileOutputStream
、BufferedOutputStream
等 - 字符输入流:
Reader
(抽象基类)→FileReader
、BufferedReader
等 - 字符输出流:
Writer
(抽象基类)→FileWriter
、BufferedWriter
等
示例代码
以下是使用不同 IO 流的示例:
import java.io.*;public class IOStreamExample {public static void main(String[] args) {String sourceFile = "input.txt";String destFile = "output.txt";// 1. 字节流示例:使用 FileInputStream 和 FileOutputStream 复制文件try (FileInputStream fis = new FileInputStream(sourceFile);FileOutputStream fos = new FileOutputStream(destFile)) {int byteData;while ((byteData = fis.read()) != -1) {fos.write(byteData);}System.out.println("字节流复制完成");} catch (IOException e) {e.printStackTrace();}// 2. 字符流示例:使用 FileReader 和 FileWriter 复制文本文件try (FileReader fr = new FileReader(sourceFile);FileWriter fw = new FileWriter(destFile)) {int charData;while ((charData = fr.read()) != -1) {fw.write(charData);}System.out.println("字符流复制完成");} catch (IOException e) {e.printStackTrace();}// 3. 缓冲流示例:使用 BufferedReader 和 BufferedWriter 高效处理文本try (BufferedReader br = new BufferedReader(new FileReader(sourceFile));BufferedWriter bw = new BufferedWriter(new FileWriter(destFile))) {String line;while ((line = br.readLine()) != null) {bw.write(line);bw.newLine(); // 写入换行符}System.out.println("缓冲流处理完成");} catch (IOException e) {e.printStackTrace();}// 4. 数据流示例:使用 DataInputStream 和 DataOutputStream 处理基本数据类型try (DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.dat"));DataInputStream dis = new DataInputStream(new FileInputStream("data.dat"))) {// 写入基本数据类型dos.writeInt(123);dos.writeDouble(3.14);dos.writeBoolean(true);// 读取基本数据类型(注意顺序必须与写入时一致)int num = dis.readInt();double d = dis.readDouble();boolean b = dis.readBoolean();System.out.printf("数据流读取结果:%d, %.2f, %b%n", num, d, b);} catch (IOException e) {e.printStackTrace();}}
}
说明
- 字节流适用于处理二进制数据(如图片、视频),而字符流适用于处理文本数据。
- 缓冲流(如
BufferedInputStream
、BufferedWriter
)通过缓冲区提高 IO 效率,建议优先使用。 - 数据流(如
DataInputStream
、DataOutputStream
)提供了处理基本数据类型的能力。 - Java 7 引入的 try-with-resources 语句可自动关闭实现了
AutoCloseable
接口的资源,避免资源泄漏。
这些分类和示例涵盖了 Java IO 流的核心概念和常见用法。
🌟感谢支持 听忆.-CSDN博客
🎈众口难调🎈从心就好 |