首页

文章

十五、序列化

发布网友 发布时间:2022-04-19 09:58

我来回答

1个回答

热心网友 时间:2023-10-23 23:58

(1)序列化
将数据结构或者对象转换成二进制序列的过程
(2)反序列化
将序列化过程所生成的二进制序列转换成数据结构或者对象的过程
(3)持久化
将数据结构或者对象存储起来,如内存、磁盘。

进程之间、客户端和服务器之间数据的传输。因为传输过程只能传输二进制序列。
例如如下图:

在客户端和服务器之间网络数据传输的时候,我们可以选择Serializable序列化或者广义的json,xml,protbuf ,在安卓的进程之间通信的时候,可以选择Parcelable 序列化。

(1)Serializable
Java独有的序列化
(2) Parcelable
Android独有的序列
(3)广义的序列化
json,xml,protbuf .

对象通过实现Serializable接口或者Externalizable接口,Externalizable接口也是实现了Serializable接口

serialVersionUID通常是对象的哈希码,主要用于对象的版本控制唯一标识。
序列化和反序列化的时候类中的serialVersionUID一定要一致。如果序列化时的serialVersionUID和反序列化时的serialVersionUID不一样,将会抛出异常。举个例子
我们定义了Student 类中的serialVersionUID = 1,然后将其序列化到磁盘在反序列化出来的时候,不修改serialVersionUID

序列化和反序列化都成功

我们将serialVersionUID 改成2,再反序列化出来 试试

提示serialVersionUID 不一致的异常。

因此我们知道serialVersionUID控制了对象的版本,序列化和反序列化的时候serialVersionUID一定要一致。
当然我们也可以不写serialVersionUID,这样JVM会自动给我们添加上serialVersionUID的值。当类没有任何改变的时候,我们直接序列化和反序列化是正常的,但是假如我们在序列化之后,删除或者添加了类的某个成员,JVM就会修改serialVersionUID的值,就会导致和序列化时候的serialVersionUID不一致。这样我们在反序列化的时候就还会报serialVersionUID不一致的错误。因此当我们需要序列化对象的时候,一般手动设置serialVersionUID的值。

使用 transient 关键字修饰成员

如果序列化的对象没有包含这个成员,则正常,如果包含,则会报抛异常。
举例
Student中包含2个构造方法,其中User成员没有实现Serializable接口

我们先调用第一个构造方法创建对象然后序列化

没问题

调用第二个构造方法

直接抛出 java.io.NotSerializableException异常,我们只需将User实现Serializable接口即可

不会,反序列化生成对象是从二进制直接读出来的,然后再用Object 进行强转,不是原来的那个对象。

是一个深拷贝,前后对象的引用地址不一样
ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 “君不见巴丘古城如培塿”的出处是哪里 带“奈何”的诗句大全(229句) 里翁行()拼音版、注音及读音 带“不虑”的诗句 “鲁肃当年万人守”的出处是哪里 无尘防尘棚 进出口报关流程,越详细越好。谢谢大家指教。 双线桥不是看化合价升多少就标多少的吗?为什么CL2+2KI=2KCL+I2中I失... 出师表高锰酸钾有画面了吗 2021年幼儿园新学期致家长一封信 电脑屏幕一条黑线怎么办? 销售代理商销售代理商的特点 商业代理商业代理的特征 如何看微信有没有开通微众银行 为什么微众没有开户 微众银行怎么开户 微众银行APP开户流程是什么? 唐古拉山海拔唐古拉山海拔是多少 怎么看待取消跳广场舞的人的退休金 如何选购新鲜的蓝田水柿? 恭城水柿柿树作用 创维洗衣机使用教程 创维全自动洗衣机怎么使用 自动开门器 狗羊属相婚姻相配吗 3岁的小孩不会说话怎么办 3岁孩子不会说话,应该挂什么科? 3岁小孩不会说话正常吗 鹿茸炖乌鸡怎么做? 新型冠状肺炎吃什么药可以预防 冰箱上电后一直响 食品生产许可证编号开头为“ G”。 能简单说一下在TB中的序列和数组的区别吗 EXCEL如何得出数组序列中不重复单元格且满足某一条件的个数? 数组排序是什么? 在计算机网络系统中,防火墙技术的原理是什么? 请问GPU等于核显吗? 主频不是cpu与gpu的主要区别 gpu和cpu的区别是什么? GPU是怎么生产出来的,有什么工艺? CPU 和 GPU 在物理结构和设计上有何区别? 【手机GPU】手机GPU是什么 gpu与显卡的区别? GPU工作原理 gpu的性能指标有哪些?解释这些指标的含义和影响 显卡和cpu都在同一个位置么? GPU是什么,它还要分多大吗 显卡和gpu 的区别 GPU的组成与工作原理 显卡和GPU是什么关系 GPU就是显卡吗 cpu 和gpu的含义及区别 给定一个数组,建立初始堆后,数组序列是多少 有一个数组序列:34,67,12,99,5,从键盘中任意输入一个数据,判断数列中是否包含此数 js如何将数组序列化,我只想把数组序列化,jquery也可以 PHP中array_splice()函数对数组元素的添加、修改、删除 php数组序列化a:1:{i:0;s:1:"1"} 的详细解释 如何将数组序列化成一个字符串 js如何将数组序列化? 数组排序并得到旧数组按从大到小排列的数组序列号 在TB中的序列和数组的区别吗 PHP函数sort()如何实现数组排序 404 Not Found 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 数组的排序 c#数组序列的输出 建立初始堆后,数组序列是多少 防火墙技术的意义与特征 网游之最强农民txt全集下载 华为荣耀x9怎么录屏 心脏卵圆孔未闭和动脉导管未闭严重吗新生?心脏 华为x9手机多少钱
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com