在Java中,Enum類默認是可序列化的,即可以將Enum對象寫入到輸出流中,或從輸入流中讀取Enum對象。當對Enum對象進行序列化時,會自動保存Enum對象的名稱而不是保存其值。在進行反序列化時,會根據保存的名稱來獲取對應的Enum對象。
以下是一個簡單的示例:
import java.io.*;
enum Color {
RED, GREEN, BLUE;
}
public class Main {
public static void main(String[] args) {
// 序列化Enum對象
try {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("enum.ser"));
oos.writeObject(Color.RED);
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
// 反序列化Enum對象
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("enum.ser"));
Color color = (Color) ois.readObject();
System.out.println("Deserialized Enum: " + color);
ois.close();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
在這個示例中,我們定義了一個Color枚舉,然后將Color.RED對象進行序列化,并進行反序列化操作。在反序列化時,輸出的結果應該是"Deserialized Enum: RED"。
需要注意的是,Enum類的序列化是基于Enum名稱而不是值的,因此在反序列化時需要保證Enum對象的名稱是唯一的,否則會出現錯誤。