格雅百科

【第231期】面试官:Java中serialVersionUID的作用是什么?举个例子

格雅百科
2022年5月17日下午4:03 • 面试问题 • 阅读 5 来源:www.gyballet.com/duanxz/p/3511695.html SerialVersionUID适用于Java的序列化机制。简单来说,Java的序列化机制通过判断类的serialVersionUID来验证版本一致性。反序列化时,JVM会将传入的字节流中的serialVersionUID与对应本地实体类的serialVersionUID进行比较。如果它们相同,则认为它们是一致的并且可以反序列化。否则,将出现序列化版本。不一致的异常是 InvalidCastException。 具体序列化过程如下: 序列化操作时,系统会将当前类的serialVersionUID写入序列化文件中。反序列化时,系统会检测文件中的serialVersionUID来判断是否与当前类一致。 SerialVersionUID 一致。如果一致,则说明序列化的类的版本与当前类版本相同,反序列化可以成功,否则失败。 SerialVersionUID的显示生成方法有两种: 默认为1L,例如:private static final long serialVersionUID = 1L; 根据类名、接口名、成员方法和属性等生成64位哈希字段,如:private static final long serialVersionUID = xxxxL; 当类实现Serialized接口时,如果没有显式定义serialVersionUID,Eclipse会提供相应的提醒。面对这种情况,我们只需点击Eclipse中类中的警告图标,Eclipse就会自动提供两种生成方法。如果你不想定义它,也可以在Eclipse设置中将其关闭。设置如下: Window ==> Preferences ==> Java ==> Compiler ==> Error/Warnings ==> 潜在的编程问题 更改不带serialVersionUID的Serialized类 只需将警告更改为忽略即可。 当实现 java.io.Serialized 接口的类没有显式定义serialVersionUID变量时,Java序列化机制会根据编译后的Class自动生成一个serialVersionUID,用于序列化版本比较。这种情况下,如果Class文件(类名、方法描述等)没有发生改变(添加空格、换行、添加注释等),即使多次编译,serialVersionUID也不会改变。 如果我们不想通过编译强制划分软件版本,即实现序列化接口的实体能够兼容之前的版本,我们需要显式定义一个名为serialVersionUID、long类型的变量,并且不要修改该变量值的序列化实体。两者都可以互相序列化和反序列化。 下面通过代码来说明应用程序中使用serialVersionUID的几种常见情况。 (1)序列化实体类 public long getSerialVersionUID() { // 提醒:同步而不是依赖 volatile? if (suid == null) { suid = AccessController.doPrivileged( new Privi LegedAction() {                                                                                                                                                                                                                                                                                                 。 结尾 推荐十期【第211期】面试官:谈谈为什么HTTPS是安全的 【第221期】面试官:谈谈内存泄漏和内存溢出的联系和区别 【第222期】ZooKeeper相关面试演练 【第223期】面试官:MySQL查询中,为什么要用小表驱动大表? 【第224期】MySQL索引相关面试演练 【第225期】面试官:公司项目中Java多线程一般用在什么场景? 【第226期】面试官:内存耗尽后Redis会怎样? 【第227期】面试官:我们来谈谈双重检查锁定单例模型。为什么要评两次呢? 【第228期】高频访谈:Java中常用的八种排序算法全都有! 【第229期】面试官:如何解决某个Eureka服务挂掉的问题? 【第230期】面试官:谈谈Bean的加载过程 而不是在网上搜索问题?还不赶快关注我们吧~ 版权声明:本文内容由网友自愿贡献,本文所表达的观点仅代表作者自己的观点。本网站仅提供信息存储空间服务,不拥有任何所有权,也不承担相关法律责任。如果您发现本站有任何涉嫌侵权/非法内容,请发送邮件举报。一经核实,该网站将立即删除。 本文由斑马博客整理。本文链接:https://www.gyballet.com/index.php/post/7905.html

发表评论 (已有0条评论)

还木有评论哦,快来抢沙发吧~