序列化和反序列化

1.序列化和反序列化

  • 序列化:将对象转换成字节序列,可以加方便存储在磁盘或在网络上传输。

    //1.创建一个文件流,参数为要保存对象的文件名
     FileOutputStream fos = new FileOutputStream("MyObejext.dat");
    
    //2.创建对象流,将文件流的引用作为参数传进去
     ObjectOutputStream os = new ObjectOutputStream(fos);
    
    //3.写入对象,传入一个对象作为参数
     oos.writeObject();
    //4.关闭流
     oos.close();                 //为了方便观看,省略了捕获异常
    
  • 反序列化:恢复对象的原状态,将字节序列还原成对象。

    //1.创建一个文件流,参数为要保存对象的文件名
     FileInputStream fis = new FileInputStream("MyObejext.dat");
    
    //2.创建对象流,将文件流的引用作为参数传进去
     ObjectInputStream os = new ObjectInputStream(fis);
    
    //3.读入对象,读入的对象返回值类型是Object,还要根据实际对象类型转换类型
     Object o = ois.readObject();
     
    //4.关闭流
     ois.close();				 //为了方便观看,省略了捕获异常
    

2.Serializable

Serializable是一个接口,是一个标记接口。此接口没有任何方法需要实现,唯一目的就是声明有实现它的类可以进行序列化。

3.transient

如果某实例变量不能或不应该被序列化,就用此关键字。

4.使用serialVersionUID

当对象被序列化的同时,该对象都会被标记上一个类的版本识别ID,这个ID就是serialVersionUID,是一个静态常量。serialVersionUID是根据类的结构信息计算出来的。**如果类没有显示定义这个静态常量,它的值是Java运行时根据类的内部结构自动生成。如果类的实例变量做出来修改,serialVersionUID可能会发生变化。**当Java要还原对象时,会对比对象与Java虚拟机上类的serialVersionUID。如果不相符,Java虚拟机就会抛出异常,还原操作会失败。

解决方案:把serialVersionUID定义在类中。

想知道某个类的serialVersionUID,可以采用可以用JDK的bin目录下的serialver.exe产生SerialVersionUID。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值