Java 序列化与反序列化

菜鸟的成长之路

含义

序列化:将指定的对象写到文件的过程

反序列化:将文件读出来的过程

前提

1.实现Serializable接口,否则会报错,如下图

错误信息
public class User  implements Serializable{
    private int age;

    private String name;

    public User(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}

2.将对象写入到文件中

    /**
     * 将Object序列化到文件中
     * @throws IOException
     */
    @Test
    public void test() throws IOException {
        File f = new File("2.txt");
        if(! f.exists()){
            System.out.println(f.createNewFile());
        }
        FileOutputStream fos = new FileOutputStream(f);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(new User(12,"ame"));
        oos.flush();
        oos.close();
    }

3.将文件读出来

/**
     * 将 文件 反序列化到Object中
     * @throws IOException
     * @throws ClassNotFoundException
     */
    @Test
    public void test1() throws IOException, ClassNotFoundException{
        File f = new File("2.txt");
        if(f.exists()){
            FileInputStream fis = new FileInputStream(f);
            ObjectInputStream ois = new ObjectInputStream(fis);
            User user = (User)ois.readObject();
            System.out.println(user);
        }
    }

注意点

1.必须实现Serializable接口,序列化类中包含的类也要实现这个接口

2.如果类在序列化后发生变化,反序列化会出现问题,可以指定一个serialVersionUID


注释:serialVersionUID 是用于记录class文件的版本信息的,serialVersionUID这个数字是JVM(JAVA虚拟界)通过一个类的类名、成员、包名、工程名算出的一个数字。而这时候序列化文件中记录的serialVersionUID与项目中的不一致,即找不到对应的类来反序列化。 这时可以指定一个serialVersionUID

3.当你不想要某些字段序列化时候,可以用transient关键字修饰

注:本文借鉴https://www.cnblogs.com/fnz0/p/5410856.html

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、 序列化和反序列化概念 Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化de...
    步积阅读 5,268评论 0 10
  • 原帖地址:原帖个人网站地址:个人网站简书对markdown的支持太完美了,我竟然可以直接Ctrl C/V过来。 定...
    ryderchan阅读 9,193评论 1 9
  • 序列化和反序列化的概念 序列化:把java对象转换为字节序列的过程称为对象的序列化,这些字节序列可以被保存在磁盘上...
    snoweek阅读 3,954评论 0 3
  • 序列化的意义 1.永久存储某个jvm中运行时的对象。2.对象可以网络传输3.rmi调用都是以序列化的方式传输参数 ...
    炫迈哥阅读 3,860评论 0 0
  • 简介 对于一个存在于Java虚拟机中的对象来说,其内部的状态只保持在内存中。JVM停止之后,这些状态就丢失了。在很...
    FX_SKY阅读 4,185评论 0 0