浅谈java的序列化/反序列使用场景

Java的序列化简介

Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。

将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据,还有对象中的数据类型可以用来在内存中新建对象。

序列化应该用在哪

如果单从序列化的简介上来看,很容易理解。曾经也存在很多不解,因为:

  • 在业务中,存储的数据方式,比如:文件、数据库、ftp服务 等。之前在使用的时候,只是需要了解如何保存,如何下载。
  • 在传输数据中,controll->service->dao的传输方式中,一般只涉及POJO的类转换, 基本类型数据或集合类型数据的组装、遍历等等。
  • 在三方插件中,比如elasticsearch、redis、kafka等,更多的是借助api的存储和传递 等等

初时序列化的用途

业务场景:张某某本来在A城市工作,他的档案归A城市管理,某一天张某某想去B城市工作了,他要将档案信息从A城市调到B城市
在这里插入图片描述

这时疑问的是,张某某在城市A在办理档案转移手续时,城市A直接调用城市B的档案信息接口转移进去不就可以。
但是可能存在的问题,如果档案信息比较复杂,涉及的内容比较多,如何保证接口的正确性,如何保证网络的畅通性。这时学到了一个新的业务词汇:报文。
将双方约定的档案信息按照报文信息填充,城市A发送报文至中心服务,中心服务负责转发报文至城市B。
相对于城市A来说, 那么A给B的过程可以称之为:序列化,B给A的过程称之为:反序列化。

去除不想序列化的内容

序列化的内容,一般是根据业务场景约定好的, 即你想序列化哪些内容,反序列化的时候你想读到哪些内容。
不想序列化的内容:

  • 不在序列化中的bean中出现
  • 或者不想序列化的属性前增加transient 修饰

控制序列化的版本

如果A和B之前是好朋友,他们用了一个serialVersionUID=1L的暗号,作为他们的通信识别 。某一天关系破裂了,修改serialVersionUID的值,那么就代码他们的序列化关系断了。

实战用途

当你的脑海中有了序列化的用途时, 那么在你的实际业务中可以通过序列化来完成你需要的业务场景。

在我的程序中,如何想要保存程序关闭时树的展开、收起形状,那么我可以通过序列化的操作来完成。
相比于遍历树的每个节点,获知树的形态属性并保存,通过递归来回显保存时的树的形状, 序列化或许减少了许多工作。

在这里插入图片描述

拓展自己的脑海,让自己作为一个看的更远的智者。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值