package com.sf.code.serial;
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = 123456789L;
public int id;
public String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
public String toString() {
return "Person: " id " " name;
}
}
package com.sf.code.serial;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class SerialTest {
public static void main(String[] args) throws IOException {
Person person = new Person(1234, "wang");
System.out.println("Person Serial" person);
FileOutputStream fos = new FileOutputStream("Person.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(person);
oos.flush();
oos.close();
}
}
package com.sf.code.serial;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class DeserialTest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
Person person;
FileInputStream fis = new FileInputStream("Person.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
person = (Person) ois.readObject();
ois.close();
System.out.println("Person Deserial" person);
}
}
Exception in thread "main" java.io.InvalidClassException: com.sf.code.serial.Person; local class incompatible: stream classdesc serialVersionUID = 1234567890, local class serialVersionUID = 123456789
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:621)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1623)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1518)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1774)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
at com.sf.code.serial.DeserialTest.main(DeserialTest.java:13)
package com.sf.code.serial;
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = 1234567890L;
public int id;
public String name;
public int age;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
public Person(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public String toString() {
return "Person: " id
",name:" name
",age:" age;
}
}
public class SerialTest {
public static void main(String[] args) throws IOException {
Person person = new Person(1234, "wang", 100);
System.out.println("Person Serial" person);
FileOutputStream fos = new FileOutputStream("Person.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(person);
oos.flush();
oos.close();
}
}
package com.sf.code.serial;
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = 1234567890L;
public int id;
//public String name;
public int age;
public Person(int id, String name) {
this.id = id;
//this.name = name;
}
public String toString() {
return "Person: " id
// ",name:" name
",age:" age;
}
}
package com.sf.code.serial;
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = 1234567890L;
public int id;
public String name;
public int age;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
/*public Person(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}*/
public String toString() {
return "Person: " id
",name:" name
",age:" age;
}
}
public class Test implements Serializable {
private static final long serialVersionUID = 1L;
public static int staticVar = 5;
public static void main(String[] args) {
try {
//初始时staticVar为5
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream("result.obj"));
out.writeObject(new Test());
out.close();
//序列化后修改为10
Test.staticVar = 10;
ObjectInputStream oin = new ObjectInputStream(new FileInputStream(
"result.obj"));
Test t = (Test) oin.readObject();
oin.close();
//再读取,通过t.staticVar打印新的值
System.out.println(t.staticVar);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
void writeNonProxy(ObjectOutputStream out) throws IOException {
out.writeUTF(name);
out.writeLong(getSerialVersionUID());
byte flags = 0;
...
public long getSerialVersionUID() {
// REMIND: synchronize instead of relying on volatile?
if (suid == null) {
suid = AccessController.doPrivileged(
new PrivilegedAction<Long>() {
public Long run() {
return computeDefaultSUID(cl);
}
}
);
}
return suid.longValue();
}
END 十期推荐 【211期】面试官:说说为什么HTTPS是安全的 【221期】面试官:谈谈内存泄漏和内存溢出的联系与区别 【222期】ZooKeeper 相关面试演练 【223期】面试官:在MySQL查询中,为什么要用小表驱动大表 【224期】MySQL索引相关面试演练 【225期】面试官:公司项目中Java的多线程一般用在哪些场景? 【226期】面试官:内存耗尽后Redis会发生什么 【227期】面试官:说说双重检查加锁单例模式为什么两次判断? 【228期】面试高频:Java常用的八大排序算法一网打尽! 【229期】面试官:怎么解决Eureka某一个服务挂掉的问题? 【230期】面试官:讲讲Bean的加载过程 ? ~