Java对象的序列化和反序列化

Posted 路上的风景

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java对象的序列化和反序列化相关的知识,希望对你有一定的参考价值。

package com.fgy.demo2;

import java.io.Serializable;

/**
 * 想要实现序列化,必须实现Serializable接口
 */
public class Person implements Serializable {
    private String name;
    private transient Integer age;

    public Person() {
    }

    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

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

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
package com.fgy.demo2;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

/**
 * 序列化
 */
public class Demo01ObjectOutputStream {
    public static void main(String[] args) throws IOException {
        Person p = new Person("lily", 18);
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d:\a.txt"));
        oos.writeObject(p);
        oos.close();
    }
}
package com.fgy.demo2;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

/**
 * 反序列化
 */
public class Demo02ObjectInputStream {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d:\a.txt"));
        Person obj = (Person) ois.readObject();
        ois.close();
        System.out.println(obj.getName() + "--" + obj.getAge()); // lily--null
    }
}
注意:
    被static修饰的成员变量不能被序列化,序列化的都是对象。
    被transient修饰的成员变量不能被序列化
    解决java.io.InvalidClassException异常的方式:序列化对象添加成员变量 private static final long serialVersionUID = XXXL

以上是关于Java对象的序列化和反序列化的主要内容,如果未能解决你的问题,请参考以下文章

java反序列化引起的内存溢出怎么解决

一文带你全面了解java对象的序列化和反序列化

java序列化和反序列化

HashMap(key,Object)中的Java Gson序列化和反序列化对象[重复]

Java基础学习总结——Java对象的序列化和反序列化

Java序列化和反序列化——田少嵩