java序列化集合需元素实现serializable接口,用objectoutputstream写入、objectinputstream读取,注意类型强转和异常处理;原生序列化不可读且不跨语言,推荐json等替代方案。

Java 中序列化集合对象到文件,核心是让集合中的元素类型实现 Serializable 接口,再用 ObjectOutputStream 写入文件。
确保集合元素可序列化
Java 集合(如 ArrayList、HashSet)本身已实现 Serializable,但**集合里存的对象必须也支持序列化**。例如:
- 基本类型包装类(
Integer、String、Boolean等)默认可序列化; - 自定义类需显式实现
Serializable,并建议声明serialVersionUID:
private static final long serialVersionUID = 1L;
private String name;
private int age;
// 构造、getter/setter...
}
使用 ObjectOutputStream 写入文件
将集合对象写入文件的标准流程如下:
- 创建目标集合(如
ArrayList<person></person>),填充数据; - 用
FileOutputStream关联文件路径; - 用
ObjectOutputStream包装它; - 调用
writeObject()直接传入集合引用; - 务必关闭流(推荐 try-with-resources)。
list.add(new Person("张三", 25));
list.add(new Person("李四", 30));
try (FileOutputStream fos = new FileOutputStream("persons.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
oos.writeObject(list);
}
反序列化读取集合
读取时需注意类型强转,并处理异常:
- 用
ObjectInputStream从文件读取; - 返回的是
Object,需强制转为原集合类型(如(ArrayList<person>) ois.readObject()</person>); - 捕获
ClassNotFoundException(类路径缺失)、IOException(文件损坏或路径错误)。
ObjectInputStream ois = new ObjectInputStream(fis)) {
List
System.out.println(loaded);
}
注意事项与替代方案
Java 原生序列化简单但有局限性:
- 生成的二进制文件不可读、不跨语言、易受类结构变更影响(如字段增删、
serialVersionUID不匹配会抛InvalidClassException); - 若需可读性或跨平台,推荐 JSON(用 Jackson / Gson)或 XML;
- 敏感字段可用
transient修饰,避免被序列化; - 集合为空或含 null 元素不影响序列化,但反序列化后仍保持原状。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











