package test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable; public class Run { public static void main(String[] args) throws Exception { String personName = "Xiaoming";
String fileName = "person_file"; Person person = new Person();
person.setName(personName); se2File(person, fileName); // here1
// deFromFile(fileName); // here2
} public static void se2File(Person person, String fileName)
throws FileNotFoundException, IOException {
System.out.println(new File(fileName).exists());
ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(
fileName));
oo.writeObject(person);
oo.close();
System.out.println("serialized.");
System.out.println(new File(fileName).exists());
} public static void deFromFile(String fileName)
throws FileNotFoundException, IOException, ClassNotFoundException {
ObjectInputStream oi = new ObjectInputStream(new FileInputStream(
fileName));
Person person = (Person) oi.readObject();
oi.close();
System.out.println("deserialized.");
System.out.println("Hi, " + person.getName());
}
} class Person implements Serializable { // private static final long serialVersionUID = 1L; //here4
private String name; // private int age; // here3 public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}

第一步:只保留here1 ,运行。

false
serialized.
true

第二步:只保留here2 ,运行。

deserialized.
Hi, Xiaoming

第三步:只保留here2、here3 ,运行。

Exception in thread "main" java.io.InvalidClassException: test.Person; local class incompatible: stream classdesc serialVersionUID = -, local class serialVersionUID = -
at java.io.ObjectStreamClass.initNonProxy(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at test.Run.deFromFile(Run.java:)
at test.Run.main(Run.java:)

第4步:只保留here1(here4 ),运行。

true
serialized.
true

第5步:只保留here2(here4 ),运行。

deserialized.
Hi, Xiaoming

第6步:只保留here2、here3(here4 ),运行。

deserialized.
Hi, Xiaoming
05-06 02:55