Java 序列化与反序列化

2018-04-10  本文已影响0人  空城EN

菜鸟的成长之路

含义

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

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

前提

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

上一篇 下一篇

猜你喜欢

热点阅读