java如何对象序列化
Java 对象序列化方法
实现 Serializable 接口
需要序列化的类必须实现 java.io.Serializable 接口。该接口是一个标记接口,没有需要实现的方法。
public class Person implements Serializable {
private String name;
private int age;
// 构造方法、getter和setter省略
}
使用 ObjectOutputStream 序列化对象
通过 ObjectOutputStream 将对象写入文件或字节流。
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
Person person = new Person("Alice", 30);
oos.writeObject(person);
} catch (IOException e) {
e.printStackTrace();
}
使用 ObjectInputStream 反序列化对象
通过 ObjectInputStream 从文件或字节流中恢复对象。
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
Person restoredPerson = (Person) ois.readObject();
System.out.println(restoredPerson.getName()); // 输出: Alice
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
自定义序列化行为(可选)
通过实现 writeObject 和 readObject 方法控制序列化过程。
private void writeObject(ObjectOutputStream out) throws IOException {
out.defaultWriteObject(); // 默认序列化
// 自定义逻辑
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject(); // 默认反序列化
// 自定义逻辑
}
处理 transient 字段
标记为 transient 的字段不会被序列化。
private transient String password; // 该字段不会参与序列化
版本控制 serialVersionUID
显式声明 serialVersionUID 以避免版本不一致导致的异常。

private static final long serialVersionUID = 1L;
注意事项
- 序列化对象的所有非静态和非
transient字段必须可序列化(基本类型或实现Serializable)。 - 静态字段不会被序列化。
- 反序列化时需确保类路径中有原始类的定义。
- 对于敏感数据,建议实现
Externalizable接口或使用加密。






