如何读取序列化文件?

How to read serialized files?

这在 Java 中也是如此。我似乎无法使用此方法,保存部分效果很好并保存了对象。但是,一旦我尝试读取该文件,它就不起作用,并且出现 ObjectInputStream 错误。我刚开始使用 Serializable 界面,none 的其他问题似乎对我有帮助。预期输出为 name Joe, weight 153, height 69。错误是:

java.io.InvalidClassException:人物;本地 class 不兼容:流 classdesc serialVersionUID = -1404541419531259795,本地 class serialVersionUID = 3020781085877336930 在 java.io.ObjectStreamClass.initNonProxy(来源不明) 在 java.io.ObjectInputStream.readNonProxyDesc(来源不明) 在 java.io.ObjectInputStream.readClassDesc(来源不明) 在 java.io.ObjectInputStream.readOrdinaryObject(来源不明) 在 java.io.ObjectInputStream.readObject0(未知来源) 在 java.io.ObjectInputStream.readObject(未知来源)

    public static boolean save(Person p, String filename) {
        try {
        ObjectOutputStream os = new ObjectOutputStream(
                new FileOutputStream(filename));
        os.writeObject(p);
        os.close();
        return true;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return false;
}

    public static Person read(String filename) {
    try {
        ObjectInputStream oi = new ObjectInputStream(new FileInputStream(
                filename));
        Object o = oi.readObject();
        oi.close();
        if (o instanceof Person)
            return (Person) o;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    System.out.println("Do you want to save or load?");
    String option = s.next();
    Person p = new Person("Joe", 154, 69);
    if (option.equals("save")) {
        if (save(p, "newfile")) {
            System.out.println("Saved.");
        }
    }
    if (option.equals("load")) {
        Person p1 = read("newfile");
        if ((p1 != null)) {
            System.out.println(p1.getInfo());
        }
    }

}

}

serialVersionUID 介绍给 Person class,如 What is a serialVersionUID and why should I use it?

中所述

看来你的Personclass不知何故发生了变化,现在你无法读取保存的版本,因为字节码已经被改变了。