序列化和反序列化_demo

发布时间 2023-06-12 23:18:35作者: hemeiwolong

参考:一文搞懂序列化与反序列化 - 知乎 (zhihu.com)

一、jdk序列化和反序列化

module结构:

 

FactInfo.java

package com.hmb;

import java.io.Serial;
import java.io.Serializable;

public class FactInfo implements Serializable {
    @Serial
    private static final long serialVersionUID = 8059875275354456501L;

    private Integer id;
    private String name;

    public FactInfo(Integer id, String name) {
        this.id = id;
        this.name = name;
    }

    @Override
    public String toString() {
        return "[" + id.toString() + name.toString() + "]";
    }
}

  

TestBean.java

package com.hmb;

import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

public class TestBean implements Serializable {
    @Serial
    private static final long serialVersionUID = -444249457751783736L;
    private Integer id;
    private String name;
    private Date date;

    private FactInfo factInfo;

    public void setFactInfos(List<FactInfo> factInfos) {
        this.factInfos = factInfos;
    }

    private List<FactInfo> factInfos;

    public TestBean(Integer id, String name, Date date, FactInfo factInfo) {
        this.id = id;
        this.name = name;
        this.date = date;
        this.factInfo = factInfo;
    }

    @Override
    public String toString() {
        String factinfoStr = "";
        for (FactInfo factInfo : factInfos) {
            factinfoStr += factInfo.toString();
        }
        return id.toString() + name.toString() + date.toString() + factInfo.toString() + factinfoStr;
    }
}

  

Main.java

package com.hmb;

import java.io.*;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        TestBean testBean = new TestBean(1, "zhangsan", new Date(), new FactInfo(1, "fact1"));
        List<FactInfo> factInfos = new LinkedList<>();
        factInfos.add(new FactInfo(2, "fact2"));
        factInfos.add(new FactInfo(3, "fact3"));
        testBean.setFactInfos(factInfos);
        FileOutputStream fileOutputStream;

        try {
            System.out.println(testBean.toString());
            fileOutputStream = new FileOutputStream("test.txt");
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
            objectOutputStream.writeObject(testBean);
            ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("test.txt"));
            TestBean testBean1 = (TestBean) objectInputStream.readObject();
            System.out.println(testBean1.toString());
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
}

  

运行效果: