java中的序列化和反序列化

Java中序列化的本质就是将类转换成二进制数据进行保存,反序列化就是将二进制数据转换为java中的类的形式

  • 首先一个类能否被序列化取决于它有没有实现Serializable接口
public class day3 implements Serializable
  • 而后我们需要给这个类添加序列化版本号属性,可以手动写也可以自动生成,值得一提的是在idea中我们需要自己去开启提示自动生成版本号
  • 打开提示的步骤是点击File—settings—Inspections—Serializable class without 'serialVersionUID’将勾打上,而后我们在类名上使用快捷键Alt+Enter就可以自动生成版本号了
  • 每一次修改类中的属性时都会重新生成一个版本号
 private static final long serialVersionUID = 1979237154050606322L;
  • 这时候我们就创建完成了一个可以被序列化的Java类,我们可以通过ObjectOutputStream写入到记事本中
        FileOutputStream fileOutputStream = new FileOutputStream(new  File("C:\\Users\\zls\\Desktop\\XSteam所需jar\\a.txt"));ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);day3 d = new day3("zls");objectOutputStream.writeObject(d);objectOutputStream.flush();objectOutputStream.close();
  • 这时候我们的记事本中就保存了这个其中有一个name属性为‘zls’类的二进制文件,我们使用ObjectInputStream将这个二进制文件转换为实例类在取出其中的name看看结果是不是’zls’
        FileInputStream fileInputStream = new FileInputStream("C:\\Users\\zls\\Desktop\\XSteam所需jar\\a.txt");ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);day3 object = (day3)objectInputStream.readObject();objectInputStream.close();System.out.println(object.getName());

我们发现取出来的是zls说明我们的反序列化成功了,特别需要注意的是在反序列化的时候会检测文件中的版本号和java类中的版本号是否一致,如果不一样就会出现java.io.InvalidClassException错误,现在我们试着改动一下版本号

Exception in thread "main" java.io.InvalidClassException: day3; local class incompatible: stream classdesc serialVersionUID = 4005309906655843573, local class serialVersionUID = 5005309906655843573at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:616)at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1843)at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1713)at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2000)at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1535)at java.io.ObjectInputStream.readObject(ObjectInputStream.java:422)at day3Main.main(day3Main.java:16)

java序列化与反序列化的使用方法-java.io.InvalidClassException错误相关推荐

  1. java 序列化概念和作用_结合代码详细解读Java序列化与反序列化概念理解

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...

  2. java序列化与反序列化(转)

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...

  3. java序列化和反序列化以及序列化ID的作用分析

     java序列化和反序列化 一.概念 java对象序列化的意思就是将对象的状态转化成字节流,以后可以通过这些值再生成相同状态的对象.对象序列化是对象持久化的一种实现方法,它是将对象的属性和方法转化为一 ...

  4. Java中如何引用另一个类里的集合_【18期】Java序列化与反序列化三连问:是什么?为什么要?如何做?...

    Java序列化与反序列化是什么? Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程: 序列化:对象序列化的最主要的用处就是在传递和保存对象 ...

  5. java序列化和反序列化_Java恶意序列化背后的历史和动机

    java序列化和反序列化 与Java的序列化机制相关的问题已广为人知. 有效的Java 1st Edition (第10章)和有效的Java 2nd Edition (第11章)的整个最后一章都专门讨 ...

  6. 教你彻底学会Java序列化和反序列化

    Java序列化是什么? Java序列化是指把Java对象转换为字节序列的过程,Java反序列化是指把字节序列恢复为Java对象的过程.反序列化:客户端重文件,或者网络中获取到文件以后,在内存中重构对象 ...

  7. 理论 | 教你彻底学会Java序列化和反序列化

    这是小小本周的第四篇 Java序列化是什么? Java序列化是指把Java对象转换为字节序列的过程,Java反序列化是指把字节序列恢复为Java对象的过程.反序列化:客户端重文件,或者网络中获取到文件 ...

  8. Java序列化与反序列化(一)

    目录 序列化与反序列化 1.最简单的使用:Serializable 接口 2. 序列化 ID 的问题 3. 静态字段不会序列化 4. 屏蔽字段:transient 5. 父类的序列化 6. 自定义序列 ...

  9. Serializable详解(1):代码验证Java序列化与反序列化

    说明:本文为Serializable详解(1),最后两段内容在翻译上出现歧义(暂时未翻译),将在后续的Serializable(2)文中补充. 介绍:本文根据JDK英文文档翻译而成,本译文并非完全按照 ...

最新文章

  1. 基于XMPP协议的aSmack源码分析
  2. map的key可以试一个数组吗?_【自考】数据结构第三章,数组,期末不挂科指南,第5篇...
  3. 静态static关键字修饰成员方法
  4. 软件工程 质量问题_软件质量| 软件工程
  5. hexo 环境变量_Hexo自动部署
  6. !!!随机数生成!!
  7. 华侨大学计算机学院2019,华侨大学计算机科学与技术学院2019年非全日制研究生复试成绩(第四批)...
  8. php 什么是对象,什么是PHP类和类的对象(PHP的类简介)
  9. python glob用法_python glob的安装和使用
  10. python中字符串模块_Python字符串模块
  11. 【空间分析】5 空间目标形态量测
  12. 云南满泽生物科技有限公司 满泽玛卡玛咖精片 东革阿里 奶昔
  13. GitHub图片加载不出来解决方案(超详细图文教程)
  14. lob移表空间 oracle_关于oracle带lob对象的分区表,移动表空间的问题
  15. BZOJ4556:[Tjoi2016Heoi2016]字符串 (后缀自动机+树上倍增+二分答案+线段树合并)
  16. 借助Grub4DOS的grldr启动Windows PE(软启动)
  17. 那些年常见的前端bug (持续更新)
  18. 【量化入门】通过几种常见的量化策略框架,学习量化炒股
  19. 计算机语言的学习方法
  20. 【Oracle】高级查询练习题详解

热门文章

  1. 【面试篇】前端点滴(css/css3)
  2. 学术交流站点–小木虫论坛
  3. pillow压缩图片
  4. 面试-技术面试-问题模板(超实用)
  5. lesson 21 mad or not 是不是疯了-把什么逼疯,be driving sb mad,live near 住在什么附近,过去将来时的被动式 will be done
  6. 用鸿蒙开发AI应用(五)HDF 驱动补光灯
  7. 选购kvm需要注意的重要事项
  8. 李翔敏:城市停车管理的五点困境、六大展望与三项思考
  9. 光学图像类有哪些最新发表的毕业论文呢?
  10. PyGmae:有限状态机实践(五)