Java 序列化学习笔记

什么是 Java 序列化?

Java 序列化是一种将对象转换为二进制数据流(byte stream)的过程。在进行 Java 序列化时,我们会将一个 Java 对象序列化成字节序列,以便在网络上传输或者存储到本地磁盘或数据库中。被序列化的对象可以被反序列化,以重新创建原始对象。

Java 序列化的作用

Java 序列化有很多作用,其中一些主要作用包括:

  1. 网络传输:Java 序列化可以使得我们轻松地将 Java 对象在网络上传输。发送方可以将 Java 对象序列化为字节流,并将其发送给接收方,接收方再反序列化该字节流以获取原始对象。
  2. 持久化存储:Java 序列化可以使得我们将 Java 对象存储到本地磁盘或数据库中,以便将来使用。
  3. RMI(远程方法调用):Java 序列化也是 RMI 的基础。在 RMI 中,客户端和服务器之间可以通过序列化和反序列化 Java 对象来进行相互通讯。

如何实现 Java 序列化?

实现 Java 序列化的方式非常简单。只需要在需要序列化的类中实现 Serializable 接口即可。例如:

javaCopy Code
public class Person implements Serializable { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // 省略 getter 和 setter 方法 public static void main(String[] args) throws Exception { // 将 Person 对象序列化为字节流 ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("person.txt")); out.writeObject(new Person("张三", 20)); out.close(); // 将字节流反序列化为 Person 对象 ObjectInputStream in = new ObjectInputStream(new FileInputStream("person.txt")); Person person = (Person) in.readObject(); in.close(); System.out.println(person.getName() + ", " + person.getAge()); // 输出:张三, 20 } }

在上面的例子中,我们实现了一个简单的 Person 类,并在该类中实现了 Serializable 接口。接着,我们将该对象序列化为字节流并将其存储到 person.txt 文件中。然后,我们又从 person.txt 文件中读取该字节流并反序列化为 Person 对象。

Java 序列化的限制

Java 序列化也有一些限制:

  1. 非 Java 程序无法使用 Java 序列化。
  2. 序列化过程中可能会引发版本兼容性问题,因此需要谨慎处理。
  3. 有些字段不应该被序列化,例如数据库连接、线程等。

总结

Java 序列化是 Java 编程中重要的一环。通过 Java 序列化,我们可以将 Java 对象序列化为字节流,以便在网络上传输或存储到本地磁盘或数据库中。同时,Java 序列化也是 RMI 的基础。虽然 Java 序列化也存在一些限制,但是在大多数情况下,它是非常有用的。

以上是 Java 序列化的学习笔记,希望本文可以对读者有所帮助。