一、前言

  复习Java基础知识点的序列化与反序列化过程,整理了如下学习笔记。

二、为什么需要序列化与反序列化

  程序运行时,只要需要,对象可以一直存在,并且我们可以随时访问对象的一些状态信息,如果程序终止,那么对象是肯定不会存在的,但是有时候,我们需要再程序终止时保存对象的状态信息,之后程序再次运行时可以重新恢复到之前的状态,如,玩家玩游戏退出时,需要保存玩家的状态信息(如等级、装备等等),之后玩家再此登入时,必须要恢复这些状态信息。我们可以通过数据库手段来达到这个保存状态的目的,在Java中,我们有更简便的方法进行处理,那就是序列化与反序列化。序列化是一种对象持久化的手段,反序列化与序列化相反,其是通过序列化后的信息重新组装成对象。序列化与反序列化普遍应用在网络传输、RMI等场景中。

三、序列化概述

  3.1 序列化类结构图

  下面展示了与序列化相关的类的结构图

【Java基础】序列化与反序列化深入分析

  说明:虚线框的表示接口类型,实线框表示具体的类。

  3.2 序列化关键字说明

  与序列化相关的关键字如下

【Java基础】序列化与反序列化深入分析

  说明:

  1. 关键字transient,用来修饰字段,表示此字段在默认序列化过程中不会被处理,但是可以采用另外的手段进行处理。

  2. 关键字serialVersionUID,表示序列化版本号,当两个类的序列化ID一致时允许反序列化,默认可以采用编译器提供的值1L。

  3.3 序列化方法说明

  与序列化相关的方法如下

【Java基础】序列化与反序列化深入分析  说明:writeObject与readObject方法分别在ObjectOutput接口与ObjectInput接口中声明,在ObjectOutputStream与ObjectInputStream中实现。

四、Serializable

  4.1 Serializable定义

  Serializable定义如下  

public interface Serializable {
}

  说明:Serializable为一个接口,并且没有任何字段和方法,仅仅作为一个标识。

  4.2 使用说明

  当序列化对象时,只需要将对象标记为可序列化,即实现接口Serializable即可。下面的Person类实现了Serializable接口。 

package com.hust.grid.leesf.serializable;

import java.io.Serializable;

public class Person implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private String name;
    private String gender;
    private int age;
    private transient Person friend;


    public Person() {
        
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    
    public Person getFriend() {
        return friend;
    }
    
    public void setFriend(Person friend) {
        this.friend = friend;
    }

    @Override
    public String toString() {
        return "name = " + name + ", gender = " + gender + ", age = " + age
                + ", friend info is [" + friend + "]";
    }
}
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-21
  • 2021-09-05
  • 2021-07-29
  • 2022-12-23
  • 2021-07-22
猜你喜欢
  • 2021-05-28
  • 2022-12-23
  • 2021-11-24
  • 2022-12-23
相关资源
相似解决方案