掌握 Java ObjectOutputStream:序列化、核心方法与实战示例
Java ObjectOutputStream 类
ObjectOutputStream 来自 java.io,用于写入 Java 对象供 ObjectInputStream 后续读取。继承 OutputStream,是 Java 内置序列化机制的核心。
ObjectOutputStream 工作原理
向 ObjectOutputStream 写入对象时,框架将类名、字段值、类型信息编码为二进制格式——即序列化。生成的字节流可存文件、网络传输或内存嵌入。
重要: 仅实现 java.io.Serializable 的对象可序列化。该标记接口告知运行时对象可安全持久化或传输。
创建 ObjectOutputStream
导入类:
import java.io.ObjectOutputStream;
关联 FileOutputStream 或其他 OutputStream:
// 写入名为 "data.bin" 的文件
FileOutputStream fileStream = new FileOutputStream("data.bin");
ObjectOutputStream objStream = new ObjectOutputStream(fileStream);
此时 objStream 可将对象序列化进 fileStream。
ObjectOutputStream 关键方法
write(int b)– 写单字节writeBoolean(boolean v)– 写布尔值writeChar(int v)– 写字符writeInt(int v)– 写整数writeObject(Object obj)– 序列化给定对象
示例 1:序列化基本类型与字符串
写入 int 和 String 到文件,再用 ObjectInputStream 读回:
import java.io.*;
public class Main {
public static void main(String[] args) {
int data1 = 5;
String data2 = "This is programiz";
try {
// 写对象
FileOutputStream fos = new FileOutputStream("file.bin");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeInt(data1);
oos.writeObject(data2);
oos.close();
// 读对象
FileInputStream fis = new FileInputStream("file.bin");
ObjectInputStream ois = new ObjectInputStream(fis);
System.out.println("Integer data :" + ois.readInt());
System.out.println("String data :" + ois.readObject());
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出
Integer data :5 String data :This is programiz
示例 2:序列化自定义对象
用户定义类只需实现 Serializable:
import java.io.*;
class Dog implements Serializable {
String name;
String breed;
Dog(String name, String breed) {
this.name = name;
this.breed = breed;
}
}
public class Main {
public static void main(String[] args) {
Dog dog1 = new Dog("Tyson", "Labrador");
try {
// 写对象
FileOutputStream fos = new FileOutputStream("dog.bin");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(dog1);
oos.close();
// 读对象
FileInputStream fis = new FileInputStream("dog.bin");
ObjectInputStream ois = new ObjectInputStream(fis);
Dog newDog = (Dog) ois.readObject();
System.out.println("Dog Name: " + newDog.name);
System.out.println("Dog Breed: " + newDog.breed);
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出
Dog Name: Tyson Dog Breed: Labrador
Dog 必须实现 Serializable,因 ObjectOutputStream 仅能写可序列化对象。
ObjectOutputStream 其他操作
| 方法 | 描述 |
|---|---|
flush() | 刷新缓冲输出字节到底层流 |
drain() | 刷新缓冲数据(Java 9+) |
close() | 关闭流释放系统资源 |
深入参考官方 Java 文档。
java
- 深入理解 Java final 关键字:变量、方法与类的不可变性
- Java instanceof 运算符完全指南:用法、继承与接口检查
- 精通 Java 继承:核心概念、类型与实战示例
- 深入理解 Java 静态嵌套类:用法、差异与实战示例
- 精通 Java 匿名内部类:定义、语法与实战示例
- Java 单例模式详解:安全实现与使用指南
- 精通 Java 反射:运行时检查类、方法与字段
- 精通 Java ArrayList:操作、方法与最佳实践
- Java Stack 类全面指南:用法、核心方法与实战示例
- Java HashSet 类完全指南:操作、方法与集合论实战
- 掌握 Java 泛型:构建可复用、类型安全的代码
- 掌握 Java 文件操作:java.io 包下的创建、读取、写入与删除