2012-08-02 36 views
0

我有一個序列化的類,它有變量ABC。我在該類中聲明瞭serialVersionUID。我使用矢量將類的實例保存到文本文件中。如果我要更改類(添加變量D),我現在有兩個不同的類(我試圖從文件讀取的ABC和文件中的ABCD)。如果我保持serialVersionUID相同,它是否只是省略D感,我想讀的只有ABC?例如:searialVersionUID更新類的理解

Class MyClass implements serializable 
{ 
    serialVersionUID = 12345; 
    int a = 0; 
    int b = 0; 
    int c = 0; 
} 

Class implmentation 
{ 
    MyClass me = new MyClass(); 
    me.a = 2; 
    me.b = 4; 
    me.c = 6; 
} 

//保存到使用ObjectOutputStream

txt文件

//稍後更改myClass的添加INT d = 0;

如果我想從文本文件中讀取原始myClass對象(我),它是否仍然能夠讀取它?

對不起,我沒有SSCCE,但我想在我開始工作之前進行驗證。

回答

2

請看看這裏http://denis-zhdanov.blogspot.com/2009/09/serialversionuid-update-policy-on-class.html

刪除字段 - 如果某個字段在一個類中刪除,寫將不包含它的價值流。當流由較早的類讀取時,字段的值將被設置爲默認值,因爲流中沒有可用值。但是,該默認值可能會損害早期版本履行合同的能力;

添加字段 - 當正在重構的類具有不在流中出現的字段時,對象中的該字段將被初始化爲其類型的默認值。如果需要類特定的初始化,則該類可以提供一個readObject方法,該方法可以將該字段初始化爲非默認值;

0

與其依靠未經審閱的未經審閱的第三方博客,請參閱對象序列化規範的Object Versioning部分。