序列化和反序列化

 

序列化的存在是为了让他们离开内存空间,存入磁盘,以便长期保存。

反序列化就是把磁盘中的文件拿到内存中来。

 

以内存为基准,想内存中放数据就使用ObjectInputStream   

  从内存中取出数据到磁盘就使用ObjectOutputStream


只有实现了 Serializable或 Externalizable接口的类的对象才能被序列化。
实现Externalizable接口的类完全由自身来控制序列化的行为,而仅实现Serializable接口的类可以 采用默认的序列化方式 。

 

序列化使用的是 

  ObjectOutputStream对象   和  writeObject方法

反序列化使用的是ObjectInputStream   和readObject方法

 

1.创建一个Person类实现了Serializable接口

package cn.happy.Serialization;

import java.io.Serializable;

public class Person implements Serializable {

     private static final long serialVersionUID = -5809782578272943999L;//序列化版本标识符
     private int age;
     private String name;
     private String sex;


    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    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;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

2.实现序列化和反序列化

package cn.happy.Serialization;

import java.io.*;
import java.text.MessageFormat;

public class TestObjSerializeAndDeserialize {

    public static void main(String[] args) throws Exception {
                //序列化方法
                SerializePerson();
                //反序列化方法
        Person p = DeserializePerson();
        System.out.println(MessageFormat.format("name={0},age={1},sex={2}",p.getName(),p.getAge(),p.getSex()));
    }
    //序列化
    private static void SerializePerson() throws Exception{//记得声明异常,不然new FileOutputStream(new File("D:/序列化输入地址.txt"))会报错。
        Person person=new Person();
        person.setAge(12);
        person.setName("小明");
        person.setSex("男");
        //ObjectOutputStream将内存中的内容输出到磁盘中。
        ObjectOutputStream outputStream=new ObjectOutputStream(new FileOutputStream(new File("D:/序列化输入地址.txt")));
        outputStream.writeObject(person);
        System.out.println("序列化成功");
        outputStream.close();
    }
    //反序列化
    private static Person DeserializePerson()throws Exception{
        //使用ObjectInputStream写到内存
        ObjectInputStream objectInputStream=new ObjectInputStream(new FileInputStream(new File("D:/序列化输入地址.txt")));
        Person ps= (Person) objectInputStream.readObject();
        System.out.println("反序列化成功");
        return ps;
    }
}

 

结果:

 

posted @ 2018-12-24 21:46  就让文谦先行  阅读(236)  评论(0编辑  收藏  举报