public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[];
/** Cache the hash code for the string */ private int hash; // Default to 0
/** use serialVersionUID from JDK 1.0.2 for interoperability */ private static final long serialVersionUID = -6849794470754667710L;
public class User implements Serializable { private String name; private Integer age; public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Integer getAge() { return age; }
public void setAge(Integer age) { this.age = age; }
@Override public String toString() { return"User{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
测试类
先进行序列化, 再进行反序列化.
public class SerializableTest { private static void serialize(User user) throws Exception { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("D:\\111.txt"))); oos.writeObject(user); oos.close(); }
private static User deserialize() throws Exception{ ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("D:\\111.txt"))); return (User) ois.readObject(); }
public static void main(String[] args) throws Exception { User user = new User(); user.setName("tyshawn"); user.setAge(18); System.out.println("序列化前的结果: " + user);
serialize(user); User dUser = deserialize(); System.out.println("反序列化后的结果: "+ dUser); } }
结果
先注释掉反序列化代码,执行序列化代码,然后User类新增一个属性sex。
public class User implements Serializable { private String name; private Integer age; private String sex; public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Integer getAge() { return age; }
public void setAge(Integer age) { this.age = age; }
public String getSex() { return sex; }
public void setSex(String sex) { this.sex = sex; }
@Override public String toString() { return"User{" + "name='" + name + '\'' + ", age=" + age + ", sex='" + sex + '\'' + '}'; } }
再注释掉序列化代码执行反序列化代码,最后结果如下:
“
序列化前的结果: User{name='tyshawn', age=18}
Exception in thread "main" java.io.InvalidClassException: org.tyshawn.SerializeAndDeserialize.User; local class incompatible: stream classdesc serialVersionUID = 1035612825366363028, local class serialVersionUID = -1830850955895931978报错结果为序列化与反序列化产生的serialVersionUID不一致。