跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

怎么利用ObjectOutputStream将内存对象状态写入到文件

使用ObjectOutputStream写入对象前,类必须实现Serializable接口并声明serialVersionUID;需用FileOutputStream包装,通过writeObject()写入,推荐try-with-resources管理流;transient字段不参与序列化;注意处理NotSerializableException和InvalidClassException。 要用
ObjectOutputStream
把内存中的对象写入文件,核心前提是:该对象所属的类必须实现 Serializable 接口,且整个对象图(包括所有引用的字段)都可序列化。 确保类可序列化 在类定义开头加上
implements Serializable
,并建议显式声明
serialVersionUID
,避免因编译器自动生成差异导致反序列化失败:
public class Person implements Serializable { private static final long serialVersionUID = 1L; private String name; private int age; // 构造方法、getter/setter 省略 }
用 ObjectOutputStream 写入文件 需配合
FileOutputStream
使用,注意按顺序创建流,并在操作完成后关闭: 先创建
FileOutputStream
指向目标文件路径 再用它包装出
ObjectOutputStream
调用
writeObject()
传入对象实例 务必
close()
两个流(推荐 try-with-resources 自动管理)
try (FileOutputStream fos = new FileOutputStream("person.dat"); ObjectOutputStream oos = new ObjectOutputStream(fos)) { Person p = new Person("Alice", 30); oos.writeObject(p); // 写入对象 } catch (IOException e) { e.printStackTrace(); }
注意不可序列化的字段 如果类中包含不能或不应被保存的字段(如数据库连接、线程、临时计算结果),用
transient
修饰:
private transient Thread workerThread; // 不会被写入 private transient int cachedHashCode; // 不会持久化
这些字段在反序列化后为默认值(
null
、
0
、
false
等)。 常见问题提醒 NotSerializableException :某个被引用的对象没实现
Serializable
,逐级检查对象图 InvalidClassException :类结构变动后未更新
serialVersionUID
文件是二进制格式 :不能直接用文本编辑器查看,需用
ObjectInputStream
读取还原 多次
writeObject()
可写入多个对象,但读取时要按相同顺序调用
readObject()

相关文章