序列化和反序列化是什么?

反序列化会遇到什么问题,如何解决?

1 答案

序列化和反序列化是什么?

Java 序列化:是指把 Java 对象转换为字节序列的过程,主要作用是保存和传递对象。

Java 反序列化:是指把字节序列恢复为 Java 对象的过程,主要作用是重建文件或者网络上的对象。

为什么需要序列化与反序列化?

  • 可以实现分布式对象,如远程方法调用。
  • 不仅可以保存一个对象的数据,还能递归保存对象引用的每个对象的数据。如此可以"深复制"对象,即复制对象本身及引用的对象本身。
  • 序列化可以将内存中的类写入文件或数据库中。这样下次需要实例化的时候,只要反序列化即可将类实例化到内存中,并保留序列化时类中的所有变量和状态。
  • 序列化以后就都是字节流,可以进行通用的格式传输或保存。传输结束以后,要再次使用,就进行反序列化还原,这样对象还是对象,文件还是文件。

如何实现 Java 序列化与反序列化?

  1. 首先我们要把准备要序列化类,实现 Serializable 接口

    class Person implements Serializable {}
    
  2. 然后序列化到文件中:

    File file = new File("person.obj");
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
    
    //实例化类
    Person person = new Person();
    //把类对象序列化
    oos.writeObject(person);
    oos.close();
    

遇到什么问题?

  1. 如果使用ObjectOutPutStream方式序列化对象,里面一定要有serialVersionUID,否则旧数据会反序列化失败。
  2. 一旦序列化保存到磁盘操作后,就不要修改类名了,否则数据反序列化就会失败。

尽量把对象转化成JSON保存更稳妥

xiaobai xiaobai 4 月前 点赞 0