1. 什么是序列化和反序列化?

在 Java 中,我们的程序运行在内存里,程序中的对象也是存在于内存中的。但有时我们需要将这些对象的状态保存下来(持久化),或者通过网络将它们发送到另一个地方。

简单来说:

2. 序列化流 (ObjectOutputStream)

Java 中用于执行序列化操作的流叫做 ObjectOutputStream

示例代码:

假设我们有一个 User 类:

import java.io.Serializable;

// 1. 必须实现 Serializable 接口
public class User implements Serializable {
    // 默认会添加一个 serialVersionUID
    // 推荐显式声明一个 serialVersionUID
    private static final long serialVersionUID = 1L;

    private String username;
    private int age;

    // 构造函数、Getter/Setter 省略...

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\\\\'' +
                ", age=" + age +
                '}';
    }
}

序列化 User 对象的代码:

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

public class SerializeDemo {
    public static void main(String[] args) {
        User user = new User("Alice", 25);

        try (FileOutputStream fos = new FileOutputStream("user.dat");
             ObjectOutputStream oos = new ObjectOutputStream(fos)) {

            // 3. 调用 writeObject() 方法
            oos.writeObject(user);
            System.out.println("对象序列化成功!");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

执行后,你会得到一个 user.dat 文件,它包含了 user 对象的二进制数据。

3. 反序列化流 (ObjectInputStream)