在Java中,序列化和反序列化是將對象轉換為字節流以便在網絡上傳輸或將其存儲到磁盤上的過程。序列化是將對象的狀態(即其成員變量的值)轉換為字節流的過程。反序列化則是將字節流重新轉換為對象的過程。
Java提供了java.io.Serializable接口,用于標識一個類的對象可以被序列化。要序列化一個對象,需要實現Serializable接口,并使用java.io.ObjectOutputStream類將其寫入字節流中。要反序列化一個對象,需要使用java.io.ObjectInputStream類從字節流中讀取對象。
以下是一個簡單的示例,演示了如何使用Java序列化和反序列化:
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;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class SerializeExample {
public static void main(String[] args) {
Person person = new Person("John Doe", 30);
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
oos.writeObject(person);
System.out.println("Person對象已成功序列化到文件person.ser");
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class DeserializeExample {
public static void main(String[] args) {
Person person = null;
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
person = (Person) ois.readObject();
System.out.println("Person對象已成功從文件person.ser反序列化");
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println(person);
}
}
運行上述示例,將會看到以下輸出:
Person對象已成功序列化到文件person.ser
Person對象已成功從文件person.ser反序列化
這表明Java序列化和反序列化已成功實現。