Serializable的意义

首先说明Serializable主要作用将类的实例持久化保存,序列化就是保存,反序列化就是读取。保存也不一定保存在本地,也可以保存到远方。类一定要实现Serializable才可以

实例

操作的学生类

import java.io.Serializable;

public class Student implements Serializable {
    private  int id;
    private  String name;
    private  String sex;
    //   自定义serialVersionUID
    private static final long serialVersionUID = 8735132092273200831L;
    //    加上 transient 关键字后Serializable就不会再本地存储该类型
    transient private String school;

    public Student(int id, String name, String sex) {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }
}

用于测试的实例

import java.io.*;

public class Serializable {
    public static void main(String[] args){
//        writeObj();
        readObj();
    }

    /**
     * 将类作为文本写入硬盘
     */
    public static void writeObj(){
        Student s=new Student(1,"测试","");
        try{
            ObjectOutputStream objectOutputStream=new ObjectOutputStream(new FileOutputStream("obj.txt"));
            objectOutputStream.writeObject(s);
            objectOutputStream.close();
        }catch (IOException e){
            e.printStackTrace();
        }
    }

    /**
     * 将类从文本中提取并赋值给内存中的类
     */
    public static void readObj(){
        try{
            ObjectInputStream objectInputStream=new ObjectInputStream(new FileInputStream("obj.txt"));
            try{
                Object object=objectInputStream.readObject();
                Student student=(Student)object;
                System.out.println(student);
            }catch (ClassNotFoundException e){
                e.printStackTrace();
            }
        }catch(IOException e){
            e.printStackTrace();
        }

    }
}

测试方法
  1. 先在main方法中运行writeObj将实例化的学生类写入本地
  2. 将writeObj方法注释
  3. 添加readObj方法
  4. 运行后无异常
  5. 在Student类增加一个属性
  6. 运行main函数,出错
  7. 在新增属性前加入 transient 关键字
  8. 运行main函数 无错
  9. 自定义自己的UID
  10. 运行main函数出错
  11. 根据错误将错误中的uid复制进入自己定义的uid
  12. 运行无错
发布了28 篇原创文章 · 获赞 14 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_28738419/article/details/80338544