用ObjectOutputStream写对象到文件需三步:先用FileOutputStream打开文件,再包装为ObjectOutputStream,最后调用writeObject()写入;对象类必须实现Serializable接口,并建议声明serialVersionUID,敏感字段用transient修饰。

用 ObjectOutputStream 把对象写入文件,核心是:先用 FileOutputStream 打开文件,再把它包装成 ObjectOutputStream,然后调用 writeObject() 方法。前提是该对象的类必须实现 Serializable 接口。
确保类可序列化
只有实现了 java.io.Serializable 接口的类,其实例才能被 ObjectOutputStream 序列化。
- 接口本身是空的(标记接口),不需要实现任何方法
- 建议显式声明
private static final long serialVersionUID = 1L;,避免反序列化时因类版本不一致出错 - 不想保存的字段用
transient修饰(例如数据库连接、线程等不可序列化资源)
写出对象到文件的基本步骤
按顺序完成三件事:打开文件流 → 包装为对象输出流 → 写入对象 → 关闭流(推荐 try-with-resources 自动关闭)。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- 创建
FileOutputStream指向目标文件路径(如"person.dat") - 用它构造
ObjectOutputStream - 调用
out.writeObject(obj)—— 可连续写多个对象 - 务必关闭流,否则数据可能没真正写入磁盘
完整示例代码
假设有一个 Person 类:
import java.io.*;
class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
// 写入文件:
try (FileOutputStream fos = new FileOutputStream("person.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
Person p = new Person("张三", 25);
oos.writeObject(p);
System.out.println("对象已写入 person.dat");
} catch (IOException e) {
e.printStackTrace();
}
常见注意事项
- 文件后缀名(如
.dat)只是习惯,不影响功能,但不要用.txt等文本后缀,因为序列化后是二进制内容 - 多次调用
writeObject()会把多个对象依次写入同一个文件,读取时也要按相同顺序和次数调用readObject() - 如果写入前文件已存在,默认覆盖;如需追加,不能直接复用
ObjectOutputStream(有头部冲突),需特殊处理或改用其他方式 - 涉及敏感字段时,可重写
writeObject()和readObject()实现自定义序列化逻辑
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










