写点什么

JAVA 序列化、反序列化以及 serialVersionUID

  • 2022 年 4 月 17 日
  • 本文字数:1111 字

    阅读完需:约 4 分钟

public void setAge(Integer age) {


this.age = age;


}


}


可以看到上面的类 Dog 实现了 Serializable, 标记这个类是可以序列化的。


有人也注意到了,为什么没有弄 serialVersionUID ??


其实咱们如果不手动设置 serialVersionUID,会有默认计算出的 serialVersionUID 的。后面再讨论为什么有手动弄 serialVersionUID 的场景。


结合代码



序列化

import com.jc.mytest.model.Dog;


import java.io.*;


/**


  • @Author : JCccc

  • @CreateTime : 2020/4/21

  • 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 @Description :


**/


public class SerializeTest {


public static void main(String[] args) throws IOException, ClassNotFoundException {


//序列化对象-IO 流-存储


ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("D:\dogInfoText.out"));


Dog dog=new Dog();


dog.setName("阿福");


dog.setAge(1);


objectOutputStream.writeObject(dog);


objectOutputStream.flush();


objectOutputStream.close();


}


}


运行一下,可以看到我们的 D 盘生成了这个 Dog 类型序列化后的文件,



里面全是 ‘乱码’,没事乱码我们看不懂,但是 jvm 能看懂。


反序列化

public class SerializeTest {


public static void main(String[] args) throws IOException, ClassNotFoundException {


ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("D:\dogInfoText.out"));


Dog dog = (Dog) objectInputStream.readObject();


System.out.println("dog's name:"+dog.getName());


}


}


运行结果,跟我们序列化进去的 Dog 设置的字段属性值一样:



序列化和反序列化的简单使用操作已经完毕,作用显然都知道了,简单的理解就是转存为字节流可以方便传输,然后反序列化可以快速地拿到原来的对象。


那么接下来我们来看看为什么要加?serialVersionUID ? 如:


private static final long serialVersionUID = -856737404570574682 Java 开源项目【ali1024.coding.net/public/P7/Java/git】 7L;


private static final long serialVersionUID = 1L;


上面有说过如果我们不手动加这个?serialVersionUID,是会默认生成一个的,只是我们看不到。


上面也有说过,这个 serialVersionUID 就像是这个类的身份证号码一样,具有唯一识别的性质。


举例:


原本我们的 Dog 类只有 2 个字段属性,


最后

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。



上述的面试题答案都整理成文档笔记。 也还整理了一些面试资料 &最新 2021 收集的一些大厂的面试真题(都整理成文档,小部分截图)



以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
JAVA 序列化、反序列化以及serialVersionUID_Java_爱好编程进阶_InfoQ写作平台