Java序列化的工作流程和原理

在本文中,我们关注对象序列化。

首先我们来讨论什么是序列化,序列化的原理。然后给出一个简单的例子来演示序列化和反序列化。有时候有些信息不应该序列化,应该如何控制?我们如何定制序列化内容?最后,我们讨论了在继承结构的场景中序列化应该注意什么。

序列化概述
序列化,简单来说就是用“流”的方式保存对象。至于保存的目的地址,可以是文件,也可以是数据库,也可以是网络,就是通过网络把对象从一个节点转移到另一个节点。

我们知道在Java的I/O结构中,有ObjectOutputStream和ObjectInputStream,它们可以将对象作为二进制流输出,并从二进制流中获取对象,那么为什么需要序列化呢?这需要从Java变量的存储结构入手。我们知道,对于Java来说,基本类型存储在堆栈中,复杂类型(引用类型)存储在堆中。对于基本类型,上面的操作是可行的,但是对于复杂类型,上面的操作可能会产生重复的对象,导致错误。

序列化的工作流程如下:

1)通过输出流保存的所有对象都有唯一的序列号。

2)当需要保存一个对象时,先检查其序号。

3)当保存的对象已经包含序列号时,不需要再次保存,否则进入正常保存过程。

正是通过序列号机制,序列化才能完整准确地保存一个对象的各个状态。

序列化保存对象中各种属性值,而不是方法或方法签名等信息。至于方法或者方法签名,只要JVM能找到正确的ClassLoader,就可以调用该方法。

序列化不保存类的静态变量,因为静态变量作用于类型,而序列化作用于对象。

简单的序列化示例
序列化的整个过程由两部分组成:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值