序列化是将Java对象转换为字节流以便存储或传输,反序列化是将其恢复为对象的过程。实现Serializable接口即可支持序列化,使用ObjectOutputStream的writeObject()方法序列化对象到文件,通过ObjectInputStream的readObject()方法读取并还原对象,需注意serialVersionUID一致性、静态变量不被序列化、transient字段跳过及父类序列化要求等关键细节。

序列化与反序列化是Java中处理对象持久化的重要机制。简单来说,序列化是将一个Java对象转换为字节流的过程,而反序列化则是将字节流恢复为原来的对象。这种机制常用于对象的网络传输、保存到文件或数据库等场景。
当你需要把一个对象保存到磁盘或者通过网络发送时,Java不能直接处理整个对象。它必须把对象“打散”成一串可存储或可传输的字节。这个过程就是序列化。
要让一个类支持序列化,只需实现 java.io.Serializable 接口。这个接口是一个标记接口,不需要实现任何方法。
例如:
立即学习“Java免费学习笔记(深入)”;
<font color="green">
public class Person implements Serializable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
</font>实现了 Serializable 后,就可以使用 ObjectOutputStream 将对象写入文件或输出流。
使用 ObjectOutputStream 可以完成序列化。以下是一个将对象保存到文件的例子:
代码示例:
<font color="green">
Person person = new Person("Alice", 25);
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
oos.writeObject(person);
System.out.println("对象已序列化");
} catch (IOException e) {
e.printStackTrace();
}
</font>反序列化是序列化的逆过程。使用 ObjectInputStream 从字节流中重建对象。
示例代码:
<font color="green">
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
Person person = (Person) ois.readObject();
System.out.println("反序列化对象:" + person);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
</font>虽然序列化使用简单,但有几个细节容易忽略:
基本上就这些。掌握序列化和反序列化,就能在需要保存或传输对象时灵活应对。不复杂但容易忽略细节。
以上就是如何在Java中理解序列化与反序列化的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号