序列化案例

首先创建一个Worker实体类。代码如下:

public class Worker implements Serializable {
    private String name;
    private double salary;
    private List<String> subject;

    public Worker(String name, double salary, List<String> subject) {
        this.name = name;
        this.salary = salary;
        this.subject = subject;
    }

    @Override
    public String toString() {
        return "Worker{" +
                "name='" + name + '\'' +
                ", salary=" + salary +
                ", subject=" + subject +
                '}';
    }

    public Worker(){}

    public String getName() {
        return name;
    }

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

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public List<String> getSubject() {
        return subject;
    }

    public void setSubject(List<String> subject) {
        this.subject = subject;
    }
}

注意:该实体类必须实现serializable接口才能被序列化

下面创建一个工具类用于封装序列化和反序列化方法

public class SerializableUtils {
    //反序列化
    public static Object getDeserializable(String fileName) throws IOException {
        FileInputStream fis = new FileInputStream(fileName);
        ObjectInputStream ois = new ObjectInputStream(fis);
        Object o = null;

        try(fis;ois){
            o = ois.readObject();
        }catch (Exception e){
            e.printStackTrace();
        }
        return o;
    }

    //序列化
    public static void getSerializable(Object obj,String fileName) throws IOException {
        FileOutputStream fos = new FileOutputStream(fileName);
        ObjectOutputStream oos = new ObjectOutputStream(fos);

        try(fos;oos){
            oos.writeObject(obj);
        }
    }
}

注意:IO流的释放操作参照JDK9版本,其他版本详见try-with-resources

在程序入口,创建对象传入封装的方法中:

    public static void main(String[] args) throws IOException {
        Vector<String> vector = new Vector<>();
        vector.add("线性代数");
        vector.add("微机接口");
        vector.add("马克思主义");

        Worker w1 = new Worker("刘大", 15000, vector);

        SerializableUtils.getSerializable(w1,"D:\\临时文件夹\\测试\\新建文件夹\\worker.txt");
        Object o = SerializableUtils.getDeserializable("D:\\临时文件夹\\测试\\新建文件夹\\worker.txt");
        System.out.println(o);
    }
posted on 2021-10-19 21:22  技术小伙伴  阅读(86)  评论(0)    收藏  举报