如何实现java序列化
Java序列化的基本实现
要实现Java序列化,需要让目标类实现java.io.Serializable接口。这是一个标记接口,没有需要实现的方法。
public class Person implements Serializable {
private String name;
private int age;
// 构造方法、getter和setter
}
序列化对象到文件
使用ObjectOutputStream将对象写入文件:
Person person = new Person("张三", 25);
try (ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("person.ser"))) {
oos.writeObject(person);
}
从文件反序列化对象
使用ObjectInputStream从文件中读取对象:
try (ObjectInputStream ois = new ObjectInputStream(
new FileInputStream("person.ser"))) {
Person restoredPerson = (Person) ois.readObject();
System.out.println(restoredPerson.getName());
}
自定义序列化过程
可以通过实现writeObject和readObject方法来自定义序列化:
private void writeObject(ObjectOutputStream out) throws IOException {
out.defaultWriteObject(); // 默认序列化
// 自定义序列化逻辑
}
private void readObject(ObjectInputStream in)
throws IOException, ClassNotFoundException {
in.defaultReadObject(); // 默认反序列化
// 自定义反序列化逻辑
}
处理敏感字段
对于不想序列化的字段,可以使用transient关键字:
private transient String password; // 不会被序列化
序列化版本控制
建议显式声明serialVersionUID以避免版本不一致问题:
private static final long serialVersionUID = 1L;
序列化到字节数组
除了文件,还可以序列化到字节数组:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(person);
byte[] bytes = baos.toByteArray();
注意事项
- 序列化对象的所有非transient字段也必须是可序列化的
- 静态字段不会被序列化
- 内部类的序列化可能存在问题,建议使用静态内部类
- 考虑使用
Externalizable接口进行更细粒度的控制





