跳到主要内容

IO 流(Input/Output Streams)

简介

IO(输入/输出)流是 Java 用于处理数据读写的机制,广泛应用于文件操作、网络通信等场景。Java IO 主要分为字节流和字符流两大类。

IO 流的分类

  • 按数据单位分
    • 字节流(InputStream/OutputStream):处理所有类型数据,常用于二进制文件。
    • 字符流(Reader/Writer):专门处理文本数据。
  • 按流的方向分
    • 输入流:读取数据
    • 输出流:写出数据

常用 IO 类

类名说明
FileInputStream读取文件(字节)
FileOutputStream写文件(字节)
FileReader读取文件(字符)
FileWriter写文件(字符)
BufferedReader缓冲字符输入流
BufferedWriter缓冲字符输出流
BufferedInputStream缓冲字节输入流
BufferedOutputStream缓冲字节输出流
PrintWriter打印字符流

文件读写示例

字节流

FileInputStream fis = new FileInputStream("input.txt");
FileOutputStream fos = new FileOutputStream("output.txt");
int b;
while ((b = fis.read()) != -1) {
fos.write(b);
}
fis.close();
fos.close();

字符流

FileReader fr = new FileReader("input.txt");
FileWriter fw = new FileWriter("output.txt");
int c;
while ((c = fr.read()) != -1) {
fw.write(c);
}
fr.close();
fw.close();

缓冲流

BufferedReader br = new BufferedReader(new FileReader("input.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"));
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
}
br.close();
bw.close();

对象流

  • ObjectInputStreamObjectOutputStream 用于对象的序列化和反序列化。
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.dat"));
oos.writeObject(new Person("Tom", 20));
oos.close();

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.dat"));
Person p = (Person) ois.readObject();
ois.close();

NIO 简介

  • Java NIO(New IO)提供了更高效的缓冲区、通道和选择器,适合高性能场景。

注意事项

  • 使用 IO 流后要及时关闭,推荐使用 try-with-resources。
  • 处理异常,避免资源泄漏。

总结

IO 流是 Java 基础,掌握常用流的用法和原理,有助于高效处理数据读写。