Java中序列化和反序列化

一、介绍

序列化:将java bean对象转化为二进制字节序列。

反序列化:将二进制字节序列转化为java bean对象。

二、过程:

1、要序列化首先实现接口java.io.Serializable

2、要添加一个ID serialVersionUID,这个ID的作用就是在序列化和反序列化中用来验证是否同一个类。

3、序列化是通过ObjectQutputStream类的writeObject()方法将对象直接写出。

4、反序列化是通过ObjectQutputStream类的readObject()从流中读取对象。

三、例子

student.java 

public class student implements Serializable {

    private static final long serialVersionUID = 1211111111L;

    private String stuNum;

    private String name;

    public String getStuNum() {
        return stuNum;
    }

    public void setStuNum(String stuNum) {
        this.stuNum = stuNum;
    }

    public String getName() {
        return name;
    }

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

    public student(String stuNum, String name) {
        this.stuNum = stuNum;
        this.name = name;
    }
}

MySerializeUtil.java
    /**
     * 将对象序列化到指定文件中
     */
    public static void mySerialize(Object obj, String fileName) throws IOException {
        OutputStream out = new FileOutputStream(fileName);
        ObjectOutputStream objOut = new ObjectOutputStream(out);
        objOut.writeObject(obj);
        objOut.close();
    }

    /**
     * 从指定文件中反序列化对象
     */
    public static Object myDeserialize(String fileName) throws IOException, ClassNotFoundException {
        InputStream in = new FileInputStream(fileName);
        ObjectInputStream objIn = new ObjectInputStream(in);
        Object obj = objIn.readObject();
        return obj;
    }

 

运行

    student student = new student();
    student.setName("aaa");
    student.setStuNum("1111");
    String fileName="G:\\000\\serial3.txt";
    try {
        //  对象序列化
        MySerializeUtil.mySerialize(student, fileName);
        System.out.println("序列化原始对象完成!OK!");
        //  对象的反序列化
        Object obj=MySerializeUtil.myDeserialize(fileName);
        if(obj instanceof HealthyParams){
            student student1 = (student) obj;
            System.out.println("反序列化之后的对象 name :"+student1.getName());
        }
     } catch (Exception e) {
         e.printStackTrace();
    }

 

运行结果:

序列化原始对象完成!OK!
反序列化之后的对象 name :aaa
反序列化之后的对象 num :1111

serial3.txt 内容

 sr com.irisian.ac2.student    H0? L namet Ljava/lang/String;L stuNumq ~ xpt aaat 1111

posted on 2022-07-01 13:43  念八一棵树  阅读(572)  评论(0)    收藏  举报

导航