在 Java 中,我们的程序运行在内存里,程序中的对象也是存在于内存中的。但有时我们需要将这些对象的状态保存下来(持久化),或者通过网络将它们发送到另一个地方。
简单来说:
对象 -> 字节流 (序列化)字节流 -> 对象 (反序列化)Java 中用于执行序列化操作的流叫做 ObjectOutputStream。
FileOutputStream)中。FileOutputStream 来指定要写入的文件。FileOutputStream 来创建一个 ObjectOutputStream。ObjectOutputStream 的 writeObject(Object obj) 方法来序列化对象。Serializable 接口:你想要序列化的那个类(比如 User 类)必须实现 java.io.Serializable 接口。这是一个“标记接口”(Marker Interface),它本身没有任何方法,只是用来告诉 JVM 这个类的对象是可以被序列化的。User 类中有一个 Address 类的字段),那么那个 Address 类也必须实现 Serializable 接口,否则序列化会失败。示例代码:
假设我们有一个 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 对象的二进制数据。