范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

为什么阿里Java规约要求谨慎修改serialVersionUID字段

  serialVersionUID简要介绍
  serialVersionUID是在Java序列化、反序列化对象时起作用的一个字段。Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常,即是InvalidClassException。
  序列化是一种把对象持久化到外部的手段。在网络传输等场景中应用广泛,如Dubbo等框架。类通过实现 java.io.Serializable 接口以启用其序列化功能。阿里Java规约中的描述
  阿里规约中强制性的提醒,修改serialVersionUID字段,会引起反序列化失败的情况。代码演示
  下面,通过实际代码,来演示对象序列化、反序列化的操作。
  引入依赖<dependencies>
  <dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-lang3</artifactId>
  <version>3.8.1</version>
  </dependency>
  <dependency>
  <groupId>commons-io</groupId>
  <artifactId>commons-io</artifactId>
  <version>2.6</version>
  </dependency>
  <dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
  </dependency>
  </dependencies>
  commons-lang3这个包有帮我们实现了序列化的工具类,commons-io帮我们实现了文件操作的工具类,junit用来写单元测试。
  序列化
  有User.class如下:@Data
  @Builder
  public class User implements Serializable {
  ​
  private static final long serialVersionUID = 1L;
  ​
  private String username;
  ​
  }
  @Data 和 @Builder 是Lombok里面的注解,可以自动生成getter、setter方法等,不懂的可以查看我之前的文章,对这个有讲解。
  需要序列化的类,需要实现Serializable接口,Serializable是一个标识接口,里面没有具体需要实现的东西。
  序列化代码:@Test
  public void serializeTest() throws IOException {
  User user = User.builder().username("happyjava").build();
  byte[] serialize = SerializationUtils.serialize(user);
  FileUtils.writeByteArrayToFile(new File("serialize.txt"), serialize);
  }
  SerializationUtils是commons-lang3包给我们提供的工具类,它给我们提供了序列化和反序列化的方法,我们直接拿过来用就好了。
  FileUtils是commons-io包给我们提供的工具类,它给我们提供了非常丰富的IO操作工具类。
  执行方法后,查看serialize.txt:
  这就是序列化后,保存到外部的对象了。我们可以把它反序列化成为对象。
  反序列化
  反序列化代码如下:@Test
  public void deserializeTest() throws IOException {
  byte[] bytes = FileUtils.readFileToByteArray(new File("serialize.txt"));
  Object object = SerializationUtils.deserialize(bytes);
  System.out.println(object instanceof User);
  User user = (User)object;
  System.out.println(user.getUsername());
  }
  这里使用FileUtils把外部的文件读入,使用SerializationUtils反序列化成为对象。然后判断反序列化后对象的类型,强转为User后输出其username,运行结果如下:
  说明反序列化已经成功过了
  修改serialVersionUID值,使反序列化异常
  现在把User的serialVersionUID值做一下修改:@Data
  @Builder
  public class User implements Serializable {
  ​
  private static final long serialVersionUID = 2L;
  ​
  private String username;
  ​
  }
  之前是1,现在改为2,再次执行反序列化方法,结果如下:
  这里出现了开头提到的InvalidClassException异常,并且通过异常信息可以看到,这是serialVersionUID不一致引起的。org.apache.commons.lang3.SerializationException: java.io.InvalidClassException: cn.happy.User; local class incompatible: stream classdesc serialVersionUID = 1, local class serialVersionUID = 2
  总结
  通过理论和代码演示,我们已经知道了serialVersionUID字段可以造成反序列化失败的情况。所以在做系统升级的时候,需要充分考虑是否要改动serialVersionUID的值,因为这会引起兼容性的问题。

全球首款97寸OLED电视定价曝光25000欧元,是否进中国市场未知进入2022年,从各大彩电显示巨头的招术来看,瞄准超大屏市场已经成为必选项。据不完全统计TCL海信Redmi创维等已经出场的行业种子选手,都已经今年新品核心尺寸往上移,从去年主打8iPhone14外观基本确定,前置双挖孔,后置摄像头无变化苹果最近发布了新款低价版iPhone手机iPhoneSE3手机,iPhoneSE3手机硬件配置上搭载的是A15处理器,采用5nm工艺搭载,支持双模5G上网,电池续航能力提升,预装的拳打i9脚踢NV?苹果M1Ultra实测惨烈翻车上周,苹果公司(Apple)首次发布新款M1Ultra时,大肆宣扬了这款芯片的性能。该公司声称,M1Ultra可以提供比英特尔酷睿i912900K更好的性能,同时在相同测试负载下消扫描文件不用去打印店,华为手机自带扫描仪,纸质文稿1秒电子化分享最实在的玩机技巧,洞察最前沿的科技资讯!大家好,这里是手机科技园!在生活中,我们有时候需要扫描文件,很多人都会跑去打印店,其实没必要这么麻烦。如果你用的是华为手机,它自带扫描仪不要瞧不上千元机!这5款机型足够使用了,闭眼买就行俗话说得好,不买贵的,只买最对的,很多朋友买手机只是盲目地听信推荐,听说这款手机好,所以就买了这款。但最后在实际的使用中却不如意,很有可能是因为这款手机不适合自己。本文旨在帮预算有realme真我GTNeo3被誉为杨幂充电最快的手机?首发150W闪充成关键首发150W闪充,realme真我GTNeo3用实力诠释何为光速秒充昨天realme官微宣布将于3月22日下午1400举行真我GTNeo3系列发布会后,网上便对该系列热议纷纷。尤其办公与颜值还是M1版MacBookAir最佳,不信?你看不知不觉使用了了一年多了,基本办公很满足续航依然很好,颜值也是依然的高,有时候放着摆设也感觉是一种艺术品,办公与颜值还是M1版MacBookAir最佳,不信?你看。m1air无风扇315避坑攻略手机厂商套路深,这些营销噱头你中过几条很多朋友购买手机的时候,面对琳琅满目的产品,天花乱坠的营销概念将信将疑,想要购买到心仪的好手机不是一件容易的事情,而且许多宣传都有利用消费者片面认知进行夸大的成分。今年315就给大钰尚设计小家电产品,为消费者提高生活舒适度现在越来越多的年轻人开始热衷于享受自由惬意的独居生活,一个人也要好好生活的概念被越来越多的人认同。而在生活中,特别是独居生活,小家电的位置就尤为重要。一个贴心的小型家用电器,就能大英伟达XR产业的四大支柱NVIDIAGTC前瞻3月,是春天,也是一年之中最重要的季节。这个三月,太多值得关注大型活动接踵而至苹果的春季发布会,SXSW大会,还有本文的主角,将在3月21日至24日举办的NA到底能不能买新能源车有人把新能源车称作电动爹,也有人说新能源车是大势所趋,是苹果对诺基亚般的碾压。今天我们就详细聊聊新能源车到底能不能买。什么是新能源车新能源汽车包括四大类型混合动力电动汽车(HEV)
隐私泄露问题不可忽视!魅族凭借四大神器建筑安全长城随着手机功能越发强大,我们也是越来越离不开它,机不离身已经成为了每个人的习惯。相对的,也正是因为使用手机频繁,所以在手机上往往保存着用户许多重要的资料,比如值得怀念的照片珍贵的聊天iPhone13尚未量产,iPhone14提前剧透,苹果带来重大升级距离苹果新品发布会越来越近,因此iPhone13系列的爆料也层出不穷,而且可信度相比此前有明显提升。结合多方消息来看,笔者了解到今年的iPhone13系列仍然会有四款机型,型号和尺定档7月15日!vivoS10系列新品,带领大家告别不自然近日,vivo官微正式宣布vivoS10系列新机发布会定档于7月15日,并公布了新机代言人海报以及相关视频,消息一出便迅速引起了广大网友的关注,不少网友表示期待新机的到来。从新机代手机与电脑如何快速传输文件图片?题主你好。我们经常需要将手机里的文件传输到电脑里,却不知道使用哪种方法更节省时间。因为题目已经说了是传输所以我就不推荐云盘,网盘之类的App了,这里只限定为只需要传输一次的传输工具每秒产生188亿个世界最快实时量子随机数发生器问世每秒产生188亿个世界最快实时量子随机数发生器问世中国科学技术大学教授潘建伟张军等联合浙江大学教授储涛研究组,通过研制硅基光子集成芯片和优化实时后处理,实现了速率达18。8Gbps中国最受欢迎的健身软件Keep,投资人是日本软银和中国腾讯据知情人士透露,由日本软银(SoftBank)和中国腾讯(Tencent)投资的Keep,预计筹资约5亿美元,没有按计划递交上市申请,其聘请的摩根士丹利银行家取消了本周与投资者的推老大哥倒下,如若垄断不复存在,T3一喂出行该怎么办?快节奏的生活中,时间往往是人们最在乎的东西,出行市场中网约车因叫车快等优点逐渐替代出租车成为人们的首选。滴滴滴答一喂顺风车等平台也日益壮大,越来越多的司机选择加入网约车行业。拥有百这些App严重违法违规收集使用个人信息!下架!7月9日,国家互联网信息办公室通报根据举报,经检测核实,滴滴企业版等25款App(列表附后)存在严重违法违规收集使用个人信息问题。国家互联网信息办公室依据中华人民共和国网络安全法相马云遭打脸,曾预言京东是个悲剧,刘强东绝地逆袭,是谁救了京东都知道在国内,有两家电商平台一直就在相互掐架,不用说就知道是阿里和京东这两个大佬,两位掌门人之间也是你来我往各有胜负,尤其是阿里的缔造者马云,曾经做出过这么一个预言,京东将来会成为为什么国内格力第一,到了美国第一名却是海尔?每个企业战略方向不一样。先说一下海尔,海尔在早在20年前就开始了全球化布局,进军海外市场。从全球品牌发展来看,海尔电器20年前在美国有很强的品质和价格(全球技术,中国制造)优势。2大金空调为什么那么贵?相比于格力有哪些优点?格力空调和大金空调的对比说穿了就是国产空调和日本空调的对比。我做制冷维修已经有了二十多年了,接触的空调太多了,空调在中国有了很多年了,经历多少风风雨雨,从最早的时候华宝,春兰,江南