如何读取序列化文件?
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不知何故发生了变化,现在你无法读取保存的版本,因为字节码已经被改变了。
这在 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不知何故发生了变化,现在你无法读取保存的版本,因为字节码已经被改变了。