序列化:把对象转换为字节序列的过程称为对象的序列化。
    反序列化:把字节序列恢复为对象的过程称为对象的反序列化。

    1. public class FlyPig implements Serializable {
    2. // private static final long serialVersionUID = 1L;
    3. private static String AGE = "269";
    4. private String name;
    5. private String color;
    6. transient private String car;
    7. private String addTip;
    8. public String getName() {
    9. return name;
    10. }
    11. public void setName(String name) {
    12. this.name = name;
    13. }
    14. public String getColor() {
    15. return color;
    16. }
    17. public void setColor(String color) {
    18. this.color = color;
    19. }
    20. public String getCar() {
    21. return car;
    22. }
    23. public void setCar(String car) {
    24. this.car = car;
    25. }
    26. public String getAddTip() {
    27. return addTip;
    28. }
    29. public void setAddTip(String addTip) {
    30. this.addTip = addTip;
    31. }
    32. @Override
    33. public String toString() {
    34. return "FlyPig{" +
    35. "name='" + name + '\'' +
    36. ", color='" + color + '\'' +
    37. ", car='" + car + '\'' +
    38. ", AGE='" + AGE+ '\'' +
    39. '}';
    40. }
    41. }
    1. public class SerializableTest {
    2. public static void main(String[] args) throws Exception {
    3. serializeFlyPig();
    4. FlyPig flyPig = deserializeFlyPig();
    5. System.out.println(flyPig.toString());
    6. }
    7. /**
    8. * 序列化
    9. */
    10. private static void serializeFlyPig() throws Exception {
    11. FlyPig flyPig = new FlyPig();
    12. flyPig.setColor("black");
    13. flyPig.setName("riemann");
    14. flyPig.setName("audi");
    15. ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("d:/flypig.txt")));
    16. oos.writeObject(flyPig);
    17. System.out.println("FlyPig 对象序列化成功!");
    18. oos.close();
    19. }
    20. /**
    21. * 反序列化
    22. */
    23. private static FlyPig deserializeFlyPig() throws Exception {
    24. ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("d:/flypig.txt")));
    25. FlyPig pig = (FlyPig) ois.readObject();
    26. System.out.println("FlyPig 对象反序列化成功!");
    27. return pig;
    28. }
    29. }

    结果:序列化成功,静态变量没有序列化,transient修饰的成员变量没有不被实例化。

    1. 不实现Serializable接口,序列化和反序列化会出现NotSerializableException异常。
    2. 实现Serializable接口,注释addtip成员变量,先序列化,然后取消addtip成员变量的注释,反序列化发现出现异常InvalidClassException 。
    3. 我在实体类中没有设置serialVersionUID 赋值,但是Java会自动给我们赋值。添加addTip属性时候,会再次生成serialVersionUID 值,两次的值不一样就会抛异常了。

    处理方案:添加 private static final long serialVersionUID = 1L后继续之前这个操作,发现序列化,反序列化没有出现问题。