java序列化和serialVersionUID的使用方法实例

1、序列化:
序列化可以将一个java对象以二进制流的方式在网络中传输并且可以被持久化到数据库、文件系统中,反序列化则是可以把之前持久化在数据库或文件系统中的二进制数据以流的方式读取出来重新构造成一个和之前相同内容的java对象。
2、序列化的作用:
第一种:用于将java对象状态储存起来,通常放到一个文件中,使下次需要用到的时候再读取到它之前的状态信息。
第二种:可以让java对象在网络中传输。
3、序列化的实现:
1)、需要序列化的类需要实现Serializable接口,该接口没有任何方法,只是标示该类对象可被序列化。
2)、序列化过程:使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态)
3)、反序列化过程:使用一个输入流(如:FileInputStream)来构造一个ObjectInputStream(对象流)对象,接着,使用ObjectInputStream对象的readObject(Object obj)方法就可以将参数为obj的对象读出(即获取其状态)
4、静态long类型常量serialVersionUID的作用:
如果没有设置这个值,你在序列化一个对象之后,改动了该类的字段或者方法名之类的,那如果你再反序列化想取出之前的那个对象时就可能会抛出异常,因为你改动了类中间的信息,serialVersionUID是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,当修改后的类去反序列化的时候发现该类的serialVersionUID值和之前保存在问价中的serialVersionUID值不一致,所以就会抛出异常。
而显示的设置serialVersionUID值就可以保证版本的兼容性,如果你在类中写上了这个值,就算类变动了,它反序列化的时候也能和文件中的原值匹配上。而新增的值则会设置成null,删除的值则不会显示。
5、例子:
package com.sxit;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class Serializable01 extends Object implements Serializable{
private static final long serialVersionUID = -1466479389299512377L;
public byte b = 12;
public byte getB() {
return b;
}
public void setB(byte b) {
this.b = b;
}
public static void main(String[] args) {
try {
FileOutputStream fos = new FileOutputStream(new File("E:\\tmp\\demo2.txt"));
ObjectOutputStream os = new ObjectOutputStream(fos);
Serializable01 s = new Serializable01();
os.writeObject(s);
os.flush();
os.close();
FileInputStream fis = new FileInputStream(new File("E:\\tmp\\demo2.txt"));
ObjectInputStream ois = new ObjectInputStream(fis);
Serializable01 s2 = (Serializable01)ois.readObject();
System.out.println(s2.getB());
ois.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
6、序列化特点:
1)、如果一个类可被序列化,其子类也可以,如果该类有父类,则根据父类是否实现Serializable接口,实现了则父类对象字段可以序列化,没实现,则父类对象字段不能被序列化。
2)、声明为transient类型的成员数据不能被序列化。transient代表对象的临时数据;
3)、当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;
以上就是java序列化和serialVersionUID的讲解,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# java序列化和serialVersionUID
# java序列化和serialVersionUID使用方法详解
# 全面解释Java中的serialVersionUID
# java类中serialVersionUID的作用及其使用
# Java SerialVersionUID作用详解
# Java基础篇之serialVersionUID用法及注意事项详解
# 序列化
# 动了
# 就可以
# 你在
# 抛出
# 文件系统
# 类中
# 就会
# 子类
# 上了
# 如有
# 则是
# 没有任何
# 为你
# 也能
# 希望能
# 如果没有
# 时就
# 你再
# 谢谢大家
相关文章:
如何零成本快速生成个人自助网站?
如何自定义建站之星网站的导航菜单样式?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
,sp开头的版面叫什么?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
建站主机系统SEO优化与智能配置核心关键词操作指南
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
如何在万网ECS上快速搭建专属网站?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
如何自定义建站之星模板颜色并下载新样式?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
高防服务器租用指南:配置选择与快速部署攻略
济南网站制作的价格,历城一职专官方网站?
c# 服务器GC和工作站GC的区别和设置
常州企业建站如何选择最佳模板?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
建站之星后台密码遗忘或太弱?如何重置与强化?
如何通过老薛主机一键快速建站?
如何挑选优质建站一级代理提升网站排名?
建站之星安装需要哪些步骤及注意事项?
宝塔建站无法访问?如何排查配置与端口问题?
如何获取免费开源的自助建站系统源码?
如何选择靠谱的建站公司加盟品牌?
如何选择香港主机高效搭建外贸独立站?
如何通过虚拟机搭建网站?详细步骤解析
建站之星代理商如何保障技术支持与售后服务?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
太原网站制作公司有哪些,网约车营运证查询官网?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
网站制作难吗安全吗,做一个网站需要多久时间?
建站主机选择指南:服务器配置与SEO优化实战技巧
,怎么在广州志愿者网站注册?
大型企业网站制作流程,做网站需要注册公司吗?
如何用AWS免费套餐快速搭建高效网站?
如何快速打造个性化非模板自助建站?
如何在Ubuntu系统下快速搭建WordPress个人网站?
网站制作壁纸教程视频,电脑壁纸网站?
IOS倒计时设置UIButton标题title的抖动问题
定制建站策划方案_专业建站与网站建设方案一站式指南
建站之星导航菜单设置与功能模块配置全攻略
javascript中对象的定义、使用以及对象和原型链操作小结
如何快速搭建响应式可视化网站?
开源网站制作软件,开源网站什么意思?
韩国服务器如何优化跨境访问实现高效连接?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
建站之星会员如何解锁更多建站功能?
网站制作企业,网站的banner和导航栏是指什么?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
*请认真填写需求信息,我们会在24小时内与您取得联系。