一. IO 流 : 字节流(Byte Streams)和字符流(Character Streams)
定义: IO流是 Java 中用于处理输入和输出操作的机制。通过 IO 流,程序可以读取数据(输入)和写入数据(输出)
1. 字节流(Byte Streams): 用于处理原始的二进制数据,适用于所有类型的数据(如图像、音频、视频等)。字节流的基本类是 InputStream 和 OutputStream。
常用类
FileInputStream / FileOutputStream: 用于读取和写入文件。
ByteArrayInputStream / ByteArrayOutputStream: 用于读取和写入字节数组。
BufferedInputStream / BufferedOutputStream: 提供缓冲功能,提高读写效率。
DataInputStream / DataOutputStream: 支持基本数据类型的读写(如 int, double 等)。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class ByteStreamExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("input.txt");
FileOutputStream fos = new FileOutputStream("output.txt")) {
int byteRead;
while ((byteRead = fis.read()) != -1) {
fos.write(byteRead);
}
System.out.println("File copied successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
2. 字符流(Character Streams):用于处理字符数据,适用于文本文件的读写。字符流的基本类是 Reader 和 Writer。
常用类
FileReader / FileWriter: 用于读取和写入字符文件。
BufferedReader / BufferedWriter: 提供缓冲功能,支持按行读写。
StringReader / StringWriter: 用于读取和写入字符串。
PrintWriter: 提供格式化输出功能。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class CharacterStreamExample {
public static void main(String[] args) {
try (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(); // 添加换行符
}
System.out.println("File copied successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
3. 缓冲流(BufferedReader): 基于 FileInputStream, FileOutputStream, FileReader, FileWriter。实现的流文件读写
常用类:
BufferedInputStream / BufferedOutputStream
BufferedReader / BufferedWriter
DataInputStream / DataOutputStream
4. 序列化(Serialization)
序列化是指将对象的状态保存到文件或传输到其他地方,以便以后可以恢复该对象。Java 提供了 ObjectInputStream 和 ObjectOutputStream 来实现对象的序列化和反序列化。
import java.io.*;
class Person implements Serializable {
private static final long serialVersionUID = 1L;
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class SerializationExample {
public static void main(String[] args) {
Person person = new Person("Alice", 30);
// 序列化对象
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
oos.writeObject(person);
System.out.println("Object serialized.");
} catch (IOException e) {
e.printStackTrace();
}
// 反序列化对象
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
Person deserializedPerson = (Person) ois.readObject();
System.out.println("Deserialized object: " + deserializedPerson.name + ", " + deserializedPerson.age);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}