28、java序列化

内容纲要

file
@[toc]

28、java序列化

概念

  • 对象序列化的机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型
  • 将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化
  • 整个过程都是 Java 虚拟机(JVM)独立的

满足两个条件

  • 实现 java.io.Serializable 对象
  • 该类的所有属性必须是可序列化的。如果有一个属性不是可序列化的,则该属性必须注明是短暂的

序列化对象

  • ObjectOutputStream 类用来序列化一个对象

注意

  • 序列化并不保存静态变量
  • 要想将父类对象也序列化,就需要让父类也实现Serializable 接口

反序列化对象

  • ObjectInputStream 类用来反序列化一个对象

transient关键字

  • 当某个字段被声明为transient后,默认序列化机制就会忽略该字段

示例

public static void main(String[] args) throws Exception {
    File file = new File("person.out");

    //序列化
    ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream(file));
    Person person = new Person("John", 101, Gender.MALE);
    oout.writeObject(person);
    oout.close();

    //反序列化
    ObjectInputStream oin = new ObjectInputStream(new FileInputStream(file));
    Object newPerson = oin.readObject(); // 没有强制转换到Person类型
    oin.close();
    System.out.println(newPerson);
}

应用

  • 网络传输、RMI等场景

留下评论

您的电子邮箱地址不会被公开。