序列化与反序列化及为何要实现Serializable接口

好记性不如赖笔头……

为何要实现Serializable接口:Serializable接口是启用其序列化功能的接口。实现java.io.Serializable 接口的类是可序列化的。没有实现此接口的类将不能使它们的任一状态被序列化或逆序列化。

序列化:将class文件及内容通过流写入到文件中(也称为持久化),
反序列化:读取文件内容转为指定的class类并填充其读取到的内容

--------------------------------------------------------------------------实体类--------------------------------------------------------------------------
package com.Ckinghan.objectStream;

import java.io.Serializable;

public class Persion implements Serializable{
    /**
     * 序列化ID
     */
    private static final long serialVersionUID = 4914051092502785039L;

    private String name;

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

    public void name() {

    }

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


--------------------------------------------------------------------------序列化与反序列化--------------------------------------------------------------------------

package com.Ckinghan.objectStream;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class ObjectStreamDemo {

    public static void main(String[] args) {
        /**
         * 序列化(持久化,也就是保存class及数据到文件)对象 
         */
        objectOutputStream();

        /**
         * 反序列化文件(读取文件转换为class类并填充数据)
         */
        objectInputStream();

    }

    /**
     * @描述:反序列化文件(读取文件转换为class类并填充数据)
     * @创建时间:
     */
    public static void objectInputStream(){
        //创建流
        ObjectInputStream objectInputStream = null;
        try {
            //实例化对象
            objectInputStream = new ObjectInputStream(new FileInputStream("persion.txt"));
            /**
             * 反序列化,读取文件数据将其转换为指定的class类并填充数据
             */
            Persion persion = (Persion)objectInputStream.readObject();
            //输出
            System.out.println(persion);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            //关闭流
            if(objectInputStream != null){
                try {
                    objectInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

    /**
     * @描述:序列化(持久化)对象 
     * @创建时间:
     */
    public static void objectOutputStream(){
        //创建对象
        ObjectOutputStream objectOutputStream = null;

        try {
            //实例化对象
            objectOutputStream = new ObjectOutputStream(new FileOutputStream("persion.txt"));
            //创建实体类并填充数据
            Persion persion = new Persion();
            persion.setAge(20);
            persion.setName("小明");
            //序列化开始
            objectOutputStream.writeObject(persion);
            //提示
            System.out.println("序列化Persion成功");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //关闭流
            if(objectOutputStream != null){
                try {
                    objectOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

}


*******************执行结果:

序列化Persion成功
Persion [name=小明, age=20]
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值