对象的序列化

对象的序列化
之前没有接触过序列化,最近做分布式项目,接触到了好多加了序列化的实体bean。回来小小测试一下,以作记录。
首先我理解的序列化就是将对象转字节,以及字节转对象的反序列化。或者说将实例化的对象转换成二进制字节存储到硬盘上面。
对象想要可被序列化首先要实现Serializable接口,否则是不能被序列化的,会报java.io.NotSerializableException错误,其次还要为序列化的实体类标记唯一标识,否则当我们反序列化的时候将会出问题。
废话不多说上测试代码:

package serializable;

import java.io.Serializable;

public class SerializableBean implements Serializable{

    /**
     * 测试序列化
     */
    private static final long serialVersionUID = 1L;

    private Integer i;
    /**
     * @return the i
     */
    public Integer getI() {
        return i;
    }
    /**
     * @param i the i to set
     */
    public void setI(Integer i) {
        this.i = i;
    }
}

实现了序列化接口的实体类,并加上了唯一标识。

package serializable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class TestSerializable {

    public static void main(String[] args) {
        SerializableBean bean = new SerializableBean();
        bean.setI(2);
        File file = new File("D://b.txt");
        try {
            ObjectOutputStream stream = new ObjectOutputStream(new FileOutputStream(file));
            stream.writeObject(bean);
            stream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            ObjectInputStream stream = new ObjectInputStream(new FileInputStream(file));
            SerializableBean bean2 = (SerializableBean) stream.readObject();
            System.out.println(bean2.getI());
            stream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

简单的写个测试类,没有区分直接写在一起了,测试了一下发现当有唯一 表识serialVersionUID的时候,对象是可以正常反序列化的,且对象的数据在序列化的时候就固定了。但是如果没有这个标示,反序列化就会出问题。
暂时记录这么多,可能的错误在以后来改正和添加。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值