序列化和反序列化的定义:
(1)Java序列化就是指把Java对象转换为字节序列的过程
Java反序列化就是指把字节序列恢复为Java对象的过程。
(2)序列化最重要的作用:在传递和保存对象时.保证对象的完整性和可传递性。对象转换为有序字节流,以便在网络上传输或者保存在本地文件中。
反序列化的最重要的作用:根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。
总结:核心作用就是对象状态的保存和重建。(整个过程核心点就是字节流中所保存的对象状态及描述信息)
在Java中,可以通过实现 Serializable
接口来实现对象的序列化和反序列化。Serializable
接口是一个标记接口,没有定义任何方法,它只是用于标识一个类可以被序列化。
假设我们有一个名为 Person
的类,它实现了 Serializable
接口,可以进行序列化和反序列化操作。Person
类的定义如下:
import java.io.Serializable;
public class Person implements Serializable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
现在我们将创建一个 Person
对象并进行序列化和反序列化操作。
import java.io.*;
public class SerializationExample {
public static void main(String[] args) {
// 创建一个 Person 对象
Person person = new Person("John Doe", 30);
// 序列化操作
try {
// 创建一个输出流,可以是文件输出流或网络输出流等
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("person.bin"));
// 将对象序列化并写入输出流
outputStream.writeObject(person);
// 关闭输出流
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
// 反序列化操作
try {
// 创建一个输入流,可以是文件输入流或网络输入流等
ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("person.bin"));
// 从输入流中读取对象并进行反序列化
Person deserializedPerson = (Person) inputStream.readObject();
// 关闭输入流
inputStream.close();
// 输出反序列化后的对象属性
System.out.println("Name: " + deserializedPerson.getName());
System.out.println("Age: " + deserializedPerson.getAge());
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}