1

我有一个名为 Doodle 的对象,我将它序列化为一个字符串,就可以了。当我尝试反序列化对象时出现问题,错误是:java.io.InvalidClassException: java.util.ArrayList; 本地类不兼容:stream classdesc serialVersionUID = 8664875232659988799,本地类serialVersionUID = 8683452581122892189

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

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;


}

我使用相同的方法(但使用不同的变量)来序列化另一种类型的对象,并且使用该方法可以很好地工作。我不明白哪里有问题!

4

1 回答 1

1

我把它序列化成一个字符串就可以了

不,这样不行。String不是二进制数据的容器。字节数组和之间的往返String不保证是损失。不要这样做。使用byte[],或至少对其进行 Base64 编码。

于 2014-03-30T23:24:32.520 回答