Java 实现序列化和反序列化

2020-03-17 16:03:00来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

Java 实现序列化和反序列化

package com.io.homework;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.junit.Test;

/**
 *序列化和反序列化
 */
public class SerializeDemo{
     
    /*
     * 序列化 : 创建三个不同的Person对象,将这三个对象序列化到文件中;
     */
    @Test
    public void serializeTest() {
        Person person1 = new Person("李明", 24, 60.2);
        Person person2 = new Person("jack", 22, 67.5);
        Person person3 = new Person("斯密瑟", 26, 70.2);
        List<Person> list = new ArrayList<>();
        list.add(person1);
        list.add(person2);
        list.add(person3);

        // 3、创建ObjectOutputStream 的实例完成序列化
        ObjectOutputStream oos = null;
        try {
            // 1、创建输出流 FileOutputStream
            FileOutputStream fos = new FileOutputStream("./serialize.dat");
            // 2、创建缓冲包装节点流
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            oos = new ObjectOutputStream(bos);
            // 4、通过标识对应的数据类型,将数据写入目标地点
            oos.writeObject(list);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 5、关闭流
            if (oos != null) {
                try {
                    oos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        System.out.println("写入成功!!");

    }

    /*
     * 反序列化:三个Person对象,打印输出。验证序列化的正确;
     */
    @Test
    public void deserializationTest() {
        // 2. 创建 ObjectInputStream 的实例,包装现有节点流,用于完成反序列化

        ObjectInputStream ois = null;
        try {
            // 1. 创建 FileInputStream 的实例
            FileInputStream fis = new FileInputStream("./serialize.dat");
            BufferedInputStream bis = new BufferedInputStream(fis);
            ois = new ObjectInputStream(bis);

            @SuppressWarnings("unchecked")
            List<Person> list = (List<Person>) ois.readObject();
            Iterator<Person> it = list.iterator();

            // 3. 读取文件的内容
            while (it.hasNext()) {
                Person person = it.next();
                System.out.println(person);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ois != null) {
                try {
                    ois.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

//编写Person类,包含姓名、年龄、体重等属性,提供对应的访问方法;
class Person implements Serializable {

    private static final long serialVersionUID = 314398401529574184L;
    private String name;// 姓名
    private Integer age;// 年龄
    private double whight;// 体重

    /**
     * @param name
     * @param age
     * @param whight
     */
    public Person(String name, Integer age, double whight) {
        super();
        this.name = name;
        this.age = age;
        this.whight = whight;
    }

    public Person() {
        super();
    }

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * @return the age
     */
    public Integer getAge() {
        return age;
    }

    /**
     * @param age the age to set
     */
    public void setAge(Integer age) {
        this.age = age;
    }

    /**
     * @return the whight
     */
    public double getWhight() {
        return whight;
    }

    /**
     * @param whight the whight to set
     */
    public void setWhight(double whight) {
        this.whight = whight;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", whight=" + whight + "]";
    }

}

 


原文链接:https://www.cnblogs.com/yonxin/p/12508200.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:关于Job和Trigger是抽象的,无法实例化问题

下一篇:Java IO流 手画类图