serialVersionUID
是 Java 序列化機制中的一個關鍵因素,用于確保序列化和反序列化過程中類的版本一致性
當你在反序列化一個對象時,如果接收方和發送方的類定義不同,那么 JVM 會拋出 InvalidClassException
。為了避免這種情況,你可以在類定義中顯式地聲明 serialVersionUID
。
private static final long serialVersionUID = 1L;
如果你確實遇到了 serialVersionUID
沖突,可以采取以下措施解決:
修改發送方或接收方的類定義,使它們的 serialVersionUID
值相同。這樣,JVM 就能正確地反序列化對象。
如果類的結構發生了變化(例如,添加了新字段),但你仍然希望保留原有的 serialVersionUID
值,可以考慮使用 transient
關鍵字標記新字段,這樣在序列化和反序列化過程中,新字段將被忽略。
private transient String newField;
readObject()
和 writeObject()
方法,以便在序列化和反序列化過程中處理不同版本的數據。private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
// 處理反序列化邏輯
}
private void writeObject(ObjectOutputStream oos) throws IOException {
// 處理序列化邏輯
}