栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

序列化与反序列化总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

序列化与反序列化总结

序列化和反序列化 概念

序列化就是将对象转化为字符序列的过程反序列化就是将字符序列转化为对象的过程 为什么要序列化

在两个进程通信过程中会传输文字、音频、图片各种类型的数据,这些数据都是以二进制序列在网络间传输。当然对象也是可以通过此方法实现,这便用到了序列化与反序列化。
一方面发送方将对象序列化,在网络上传输,接收方可通过反序列化得到原始的对象数据。很好的实现了数据的持久化,可以将对象的字符序列存储在硬盘中,通常放在一个文件中。
另一方面利用序列化实现远程通信,即字符序列在网络间传输

序列化使用的用途

将对象的字符序列存储在硬盘中,通常放在一个文件中在网络传输的过程中,传送对象的字符序列 涉及的JAVA APi

 java.io.ObjectOutputStream //表示对象输出流
 writeObject(Object obj) //可以参数指定的obj对象进行序列化,把得到的字符序列写到一个目标输出流
 java.io.ObjectInputStream //表示对象输入流
 readObject() //可以把输入流读为字符序列,再通过反序列化转化为对象
使用步骤
// 假设定义了一个对象
Animal animal = new Animal();
animal.setName("老虎");
animal.setAge(9);
// 创建输出流指定目标地址
ObjectOutputStream out = new ObjOutputStream(new FileOutputStream('目标文件地址'));
// 序列化
out.writeObject(animal);
// 创建输入指定目标地址
ObjectInputStream out = new ObjectInputStream(new FileOutputStream('目标文件地址'));
// 反序列化
Animal animal = (Animal)out.readObject();
序列化ID的作用

序列化ID是用于标识唯一性,它决定着是否能够成功反序列化。便是说java的序列化机制便是判断该类的序列化ID serialVersionUID是否一致即版本是否相同。在反序列化的过程中,JVM会将传来的字节流中的serialVersionUID与本地类中的serialVersionUID进行判断一致性,若一致则可进行反序列化操作,否则便会产生版本不一致的异常。

序列化ID的使用

在本地类中定义一个名为“serialVersionUID”,long类型的变量即值保持不变,这样在之后需要改变需求时便可很好的进行修改。
若未设置,在对class编译时会自动生成一个serialVersionUID,这样随着需求的改动,进行添加其他字段后,在反序列化时会产生版本不一致。

使用transient关键字

在使用序列化机制时可以实现Serializable接口、Externalizable接口

在使用Serializable接口时,使用transient关键字可以不被序列化在使用Externalizable接口,需要我们自己指定那些属性是需要序列化的,即使使用transient关键字
注:静态变量不管是不是transient关键字修饰,都不会被序列化

总结
java 的transient关键字为我们提供了便利,你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中

经过个人总结
参考原文:

1. https://baijiahao.baidu.com/s?id=1636557218432721275&wfr=spider&for=pc
2. https://www.cnblogs.com/lukelook/p/11192677.html
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/719291.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号