在Java编程中,输入输出(Input/Output,简称IO)是程序与外部世界进行数据交换的重要机制。为了实现这一功能,Java提供了丰富的类库来处理文件读写、网络通信以及各种数据流操作。本文将详细介绍Java IO体系中的主要类及其应用场景。
一、基本概念
Java IO分为两大类:字节流和字符流。字节流主要用于处理二进制数据,而字符流则专门用于处理文本数据。每种流又分为输入流(InputStream/Reader)和输出流(OutputStream/Writer),分别负责从源读取数据或将数据写入目标。
二、字节流类
1. InputStream 和 OutputStream
- InputStream:所有字节输入流的基类,定义了基本的读取方法。
- OutputStream:所有字节输出流的基类,定义了基本的写入方法。
常见的子类包括:
- FileInputStream:用于从文件中读取字节数据。
- FileOutputStream:用于向文件中写入字节数据。
- BufferedInputStream 和 BufferedOutputStream:通过缓冲区提高读写效率。
- DataInputStream 和 DataOutputStream:支持读写基本数据类型。
示例代码
```java
import java.io.;
public class FileStreamExample {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("example.txt");
FileOutputStream fos = new FileOutputStream("output.txt");
int data;
while ((data = fis.read()) != -1) {
fos.write(data);
}
fis.close();
fos.close();
}
}
```
三、字符流类
1. Reader 和 Writer
- Reader:所有字符输入流的基类。
- Writer:所有字符输出流的基类。
常见的子类包括:
- FileReader 和 FileWriter:分别用于读写文件中的字符数据。
- BufferedReader 和 BufferedWriter:提供高效的字符读写能力。
- InputStreamReader 和 OutputStreamWriter:用于桥接字节流和字符流。
示例代码
```java
import java.io.;
public class CharacterStreamExample {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("input.txt");
FileWriter fw = new FileWriter("output.txt");
int character;
while ((character = fr.read()) != -1) {
fw.write(character);
}
fr.close();
fw.close();
}
}
```
四、高级特性
1. 数据管道流
- PipedInputStream 和 PipedOutputStream:用于线程间的数据传递。
- PipedReader 和 PipedWriter:类似的功能,但适用于字符数据。
2. 对象序列化
- ObjectInputStream 和 ObjectOutputStream:用于对象的序列化和反序列化,便于持久化存储。
示例代码
```java
import java.io.;
class Person implements Serializable {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class SerializationExample {
public static void main(String[] args) throws IOException, ClassNotFoundException {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"));
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"));
Person person = new Person("John", 30);
oos.writeObject(person);
Person loadedPerson = (Person) ois.readObject();
System.out.println(loadedPerson.name + " " + loadedPerson.age);
oos.close();
ois.close();
}
}
```
五、总结
Java IO类库为开发者提供了强大的工具集,无论是简单的文件操作还是复杂的网络通信,都能找到合适的解决方案。理解这些类的基本用法和适用场景,可以显著提升开发效率和代码质量。希望本文能帮助您更好地掌握Java IO的相关知识!