序列化:把对象转换为字节序列的过程称为对象的序列化。
反序列化:把字节序列恢复为对象的过程称为对象的反序列化。
public class FlyPig implements Serializable {// private static final long serialVersionUID = 1L;private static String AGE = "269";private String name;private String color;transient private String car;private String addTip;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public String getCar() {return car;}public void setCar(String car) {this.car = car;}public String getAddTip() {return addTip;}public void setAddTip(String addTip) {this.addTip = addTip;}@Overridepublic String toString() {return "FlyPig{" +"name='" + name + '\'' +", color='" + color + '\'' +", car='" + car + '\'' +", AGE='" + AGE+ '\'' +'}';}}
public class SerializableTest {public static void main(String[] args) throws Exception {serializeFlyPig();FlyPig flyPig = deserializeFlyPig();System.out.println(flyPig.toString());}/*** 序列化*/private static void serializeFlyPig() throws Exception {FlyPig flyPig = new FlyPig();flyPig.setColor("black");flyPig.setName("riemann");flyPig.setName("audi");ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("d:/flypig.txt")));oos.writeObject(flyPig);System.out.println("FlyPig 对象序列化成功!");oos.close();}/*** 反序列化*/private static FlyPig deserializeFlyPig() throws Exception {ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("d:/flypig.txt")));FlyPig pig = (FlyPig) ois.readObject();System.out.println("FlyPig 对象反序列化成功!");return pig;}}
结果:序列化成功,静态变量没有序列化,transient修饰的成员变量没有不被实例化。
- 不实现Serializable接口,序列化和反序列化会出现NotSerializableException异常。
- 实现Serializable接口,注释addtip成员变量,先序列化,然后取消addtip成员变量的注释,反序列化发现出现异常InvalidClassException 。
- 我在实体类中没有设置serialVersionUID 赋值,但是Java会自动给我们赋值。添加addTip属性时候,会再次生成serialVersionUID 值,两次的值不一样就会抛异常了。
处理方案:添加 private static final long serialVersionUID = 1L后继续之前这个操作,发现序列化,反序列化没有出现问题。
