JAVA 序列化、反序列化以及serialVersionUID(1)-程序员宅基地

技术标签: 程序员  python  java  开发语言  

/**

  • @Author : JCccc

  • @CreateTime : 2020/4/21

  • @Description :

**/

public class Dog implements Serializable {

private String name;

private Integer age;

@Override

public String toString() {

return “Dog{” +

“name='” + name + ‘’’ +

“, age=” + age +

‘}’;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getAge() {

return age;

}

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

  • @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 = -8567374045705746827L;

private static final long serialVersionUID = 1L;

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

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

举例:

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

然后我们进行了序列化, 这时候,对应默认对应的 serialVersionUID,绑定的内容是这个Dog,有2个字段属性,

已经序列化保存到D:\\dogInfoText.out 文件里面了。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

由于篇幅原因,就不多做展示了
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
中…(img-cH2Vxy0v-1713394382679)]

[外链图片转存中…(img-bVZ1GCEw-1713394382679)]

[外链图片转存中…(img-knbGgzUq-1713394382679)]

[外链图片转存中…(img-T4vYYq73-1713394382679)]

由于篇幅原因,就不多做展示了
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/2301_82242621/article/details/137900870

智能推荐

scanner java重新输入_关于java中scanner对象重复使用的问题-程序员宅基地

文章浏览阅读1.3k次。Scannerscanner=newScanner(System.in);inti=scanner.nextInt();System.out.println(i);intj=scanner.nextInt();System.out.println(j);这样是通过一个scanner对象两次输入分别给两个变量赋值,没有问题,执行后一切正常。Scannerscanner=new..._scanner重复使用

【矢量图】PyEcharts导出图片并矢量化_echarts 导出矢量图-程序员宅基地

文章浏览阅读3.3k次,点赞10次,收藏17次。前言图是门面,但朦胧美并不是文章所需要的问题处理导出图片(JPEG、PNG)的方式,网上很多就不再赘述了,这里咱还是矢量化下吧。网上说用phantomjs-prebuilt.js,我也试了没太整明白。然后 <a id="download" href="">下载</a> <script> const a = window.document.querySelector('#download') a.addEventListener('cl_echarts 导出矢量图

有关大数据的误区:数据统计≠大数据_大数据是不是是以经发生过的事情-程序员宅基地

文章浏览阅读545次。关于大数据的误区:数据统计是已经发生的事情,而大数据往往被用于还没有发生的事情预测或者推荐中,二者不能划等号。不过,无论数据统计也好,大数据也罢,都是为了使工作变得更为有效,让决策更为理性而准确。大数据太火了,被广泛应用到各行各业,而近阶段又有着明显的过热迹象。大数据到底是一个营销词汇,还是一个方法论?本文作者老李正是一家大数据服务提供商的资深员工,他所做的项目就是针对不同行业_大数据是不是是以经发生过的事情

搭建企业线上培训系统_线上培训平台部署架构-程序员宅基地

文章浏览阅读593次。企业线上培训系统的出现,一些集团公司的内部例会,决策会议或培训会议,可以通过线上统一进行,不再需要集中企业所有员工到指定地点培训。普通企业可以在外网租用线上培训系统,而对于一些涉密单位数据如何保障安全?企业线上培训系统根据网络环境有不同的部署方式,哪种部署更适合自身需求呢?1、纯内网部署企业线上培训系统,部署在防火墙内,供企业内部培训使用企业这样部署在线培训系统,所有数据都内网服务器上,丢失风险低,安全性高,并且内网网络带宽可以得到保障。连通宝采用软硬一体的部署方式,稳定性也可以得到保障。_线上培训平台部署架构

JS解构赋值-程序员宅基地

文章浏览阅读1.3w次,点赞24次,收藏42次。解构赋值语法是一种 Javascript 表达式。通过解构赋值,可以将属性/值从对象/数组中取出,赋值给其他变量。本文将讨论解构赋值的作用与其用法。_js解构赋值

21:单词替换_b2135 单词替换-程序员宅基地

文章浏览阅读665次。描述输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。输入输入包括3行,第1行是包含多个单词的字符串 s;第2行是待替换的单词a(长度 <= 100);第3行是a将被替换的单词b(长度 <= 100).s, a, b 最前面和最后面都没有空格.输出输出只有 1 行,将s中所有单词a替换成b之后的字符串。样例输入You want som_b2135 单词替换

随便推点

Java实现“扑克牌游戏”底层逻辑_利用数组随机生成扑克牌-程序员宅基地

Java实现“扑克牌游戏”底层逻辑,包括纸牌类的元素、构造方法和牌堆类的实现。

JavaScript循环_js用户登录验证限制次数while循环做法-程序员宅基地

文章浏览阅读819次。循环是重复性做一件事外面没办法控制每次循环的时间长度循环会增大您的程序时间复杂度(不建议无限循环嵌套 一般情况下不会超过两次)死循环是不会停止的 回导致内存溢出 从而蓝屏循环很多种 常见的三种:while,do while,forwhile循环写法是定义初始值while(布尔类型表达式){循环体 (迭代 初始值变化 操作)var i = 0//初始值定义while (i<5){i++ //不迭代会导致死循环conlose.log(i)//操作 123.._js用户登录验证限制次数while循环做法

图像分割FCN全卷积神经网络_cloudfcn-程序员宅基地

文章浏览阅读1.4k次。FCN全卷积神经网络是图像分割的基础网络FCN实现了端到端的网络,输入mxm图像,输出为mxmxc的图像,其中c代表种类。思想概述FCN叫做全卷积神经网络,顾名思义所有曾都是卷积层!也就是抛掉了全连接层,这是第一个改变;再者卷积神经网络卷到最后特征图尺寸越来越少,分辨率比较小,不适合我们做图像分割,好,这里引入一个上采样的做法,卷积完之后再上采样到大尺寸图;网络又考虑层数不断叠加后原图的信息..._cloudfcn

前端页面制作思路_前端页面设计的思路-程序员宅基地

文章浏览阅读3.7k次,点赞2次,收藏5次。项目中css的页面布局,需要屡顺一下思路,在继续下面的学习。温故而知新!W3C标准:是万维网制定的一系列标准,包括结构化标准语言(html、xml),表现标准语言(css),行为标准语言(DOM,ECMAScript)组成。这个标准倡要将结构,样式,行为分离。在网页制作中,面对设计图,网页制作人员一般要遵循的原则:先考虑设计图中的文字内容和内容模块之间的关系,重点放在编写html..._前端页面设计的思路

扫地机器人-二分+贪心-程序员宅基地

文章浏览阅读120次。最大什么的最小值,最小什么的最大值就是二分。

计算机组成原理知识复习:_计算机组成原理sm信号是什么-程序员宅基地

文章浏览阅读35次。计组,知识点归纳_计算机组成原理sm信号是什么

推荐文章

热门文章

相关标签