文章目录
前言
1. Java 中的序列化和反序列化是什么?
- 序列化
是将对象转换为字节流的过程,这样对象可以通过网络传输、持久化存储或者缓存。ava提供了java.io.serializab1e接口来支持序列化,只要类实现了这个接口,就可以将该类的对象进行序列化 - 反序列化
是将字节流重新转换为对象的过程,即从存储中读取数据并重新创建对象,
1.1 序列化(Serialization)
序列化是将 Java 对象转换为字节流的过程。通过序列化,可以将对象保存到文件中,或者通过网络传输对象。当一个对象被序列化时,它的状态(属性值)会被转换成一个字节流,以便存储或传输。
关键点:
- 实现
Serializable
接口:要让一个对象支持序列化,它的类必须实现java.io.Serializable
接口。 - 不需要实现方法:
Serializable
接口是一个标记接口,不包含任何方法,仅用于标记该类的对象是可以被序列化的。
示例代码:序列化
import java.io.*;
// 定义一个类实现Serializable接口,表示这个类的对象是可序列化的
class Person implements Serializable {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
public class SerializationExample {
public static void main(String[] args) {
// 创建一个Person对象
Person person = new Person("John", 30);
// 序列化对象
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
out.writeObject(person); // 写入对象到文件
System.out.println("对象已序列化到文件 person.ser");
} catch (IOException e) {
e.printStackTrace();
}
}
}
代码说明:
Person
类实现了Serializable
接口,使得它的对象可以被序列化。- 在
SerializationExample
类中,我们创建了一个Person
对象,并通过ObjectOutputStream
将对象写入到一个名为person.ser
的文件中。
1.2 反序列化(Deserialization)
反序列化是将字节流重新转换为 Java 对象的过程。通过反序列化,可以从文件或网络接收到的字节流恢复出对象的原始状态。
示例代码:反序列化
import java.io.*;
public class DeserializationExample {
public static void main(String[] args) {
// 反序列