溫馨提示×

首頁 > 教程 > 編程開發(fā) > Java 基礎教程 > 序列化與反序列化

序列化與反序列化

在Java中,序列化(Serialization)是將對象轉換為字節(jié)流的過程,而反序列化(Deserialization)是將字節(jié)流轉換為對象的過程。序列化與反序列化主要用于對象的持久化存儲或對象在網(wǎng)絡中的傳輸。

序列化(Serialization)

  1. 首先,需要讓類實現(xiàn)Serializable接口,這是一個標記接口,沒有任何方法需要實現(xiàn)。
import java.io.Serializable;

public class Person implements Serializable {
    private String name;
    private int age;
    
    // Constructors, getters and setters
}
  1. 使用ObjectOutputStream類來實現(xiàn)序列化,將對象寫入輸出流中。
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

public class SerializationExample {
    public static void main(String[] args) {
        Person person = new Person("Alice", 30);
        
        try (FileOutputStream fileOut = new FileOutputStream("person.ser");
             ObjectOutputStream out = new ObjectOutputStream(fileOut)) {
            out.writeObject(person);
            System.out.println("Object has been serialized");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

反序列化(Deserialization)

  1. 使用ObjectInputStream類來實現(xiàn)反序列化,從輸入流中讀取對象。
import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class DeserializationExample {
    public static void main(String[] args) {
        try (FileInputStream fileIn = new FileInputStream("person.ser");
             ObjectInputStream in = new ObjectInputStream(fileIn)) {
            Person person = (Person) in.readObject();
            System.out.println("Object has been deserialized");
            System.out.println("Name: " + person.getName());
            System.out.println("Age: " + person.getAge());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

注意事項

  • 序列化和反序列化的類必須在同一個包中。
  • 序列化版本號可以通過在類中增加private static final long serialVersionUID進行控制。
  • 注意序列化和反序列化可能會引發(fā)InvalidClassException異常,所以在進行序列化和反序列化時要謹慎處理版本兼容性問題。

以上是序列化與反序列化的基礎教程,希望能幫助你了解如何在Java中進行對象的持久化存儲與傳輸。