2014-03-30 39 views
1

我有一個名爲Doodle的對象,我將它序列化爲一個字符串,這沒關係。 當我嘗試反序列化對象時,問題出現,錯誤是: java.io.InvalidClassException:java.util.ArrayList;局部類不相容:流classdesc的serialVersionUID = 8664875232659988799,局部類的serialVersionUID = 8683452581122892189種java.io.InvalidClassException:從字符串到對象的序列化失敗java

的方法進行序列化和反序列化如下:

public static String serDoodle(Doodle dood){ 
    String serializzato = null; 
    try { 
     ByteArrayOutputStream bo = new ByteArrayOutputStream(); 
     ObjectOutputStream so = new ObjectOutputStream(bo); 
     so.writeObject(dood); 
     so.flush(); 
     serializzato = bo.toString(); 
     so.close(); 
     bo.close(); 
    } catch (Exception e) { 
     System.out.println(e); 

    } 
    return serializzato; 

} 
public static Doodle deserDoodle(String deserializza){ 
    Doodle dod = new Doodle(); 


    try { 
     byte[] b = deserializza.getBytes(); 
     ByteArrayInputStream bi = new ByteArrayInputStream(b); 
     ObjectInputStream si = new ObjectInputStream(bi); 
     dod=(Doodle) si.readObject(); 
     si.readObject().getClass(); 
     si.close(); 
     bi.close(); 
    } catch (Exception e) { 
     System.out.println("deserDoodle "+e); 

    } 
    return dod; 


} 

我使用相同的方法(但具有不同的變量)來序列另一個對象的類型和它的作用很大。 我不明白哪裏出了問題!

回答

1

我把它序列化到一個字符串和它的確定

不,這也不行。 String不是二進制數據的容器。字節陣列和String之間的往返不保證是丟失。不要這樣做。使用byte[],或者至少Base64編碼它。

+0

所以你說,字符串越長,它會丟失更多的數據? – user3457185

+0

@ user3457185像往常一樣,'你說'的問題,我什麼都沒說。我說使用'String'作爲二進制數據的容器是不行的。期。它與長度無關。 – EJP

相關問題