熬之滴水穿石:JAVA的世界(8)

本文深入探讨了Java世界中序列化(Serialization)的概念,解释了如何将对象状态保存到文件中,并通过反序列化(Deserialization)将其恢复。详细介绍了对象及其实例变量的序列化过程,包括如何使用Serializable接口使类具备序列化能力,以及如何通过ObjectOutputStream和FileOutputStream实现对象的序列化与反序列化。同时,文章还提到了如何在序列化时排除特定变量,以及静态变量无法被序列化的原因。
                              20--序列化
在JAVA的世界里,让我知道了Serialization这个东东。它的本意就是将被序列化的对象写到文件里,然后我们可以读取出来取出序列化的对象将它还原于本来的状态。这一方法在许多的JAVA框架里被无数次的运用,其实它的原理也很是简单。我们知道对象是具有状态和行为两种属性的,行为是存在类中的,而状态则存于个别的对象中。所以当我们要保存对象状态时就应该应对相应的事件去做相应的事情。我们将序列化的对象写入文件,通常采取流的方式。一般都是以字节方式表示整个被序列化的过程,当然最为重要的是采用所选的方法从而达到链接的作用。在JAVA中类分工明确eg:ObjectOutputStream就是把对象转换成可写入的文件流的数据,而FileOutputSteam来写入文件。这样以不同的组合达到最大的适用应相应的变化。

当对象被序列化时,依附对象身上的实例变量也会跟着序列化。这句话意味着对象上的实例变量所引用的对象也会加入序列化的行列。要让类能够被序列化当然得继承接口,这个接口便是Serializable。我们在序列化对象时都implement后我们的JVM就知道你写的这个类是需要序列化的。对象能够被序列化,当然我们也可以通过Deserialization来反序列化,那就是将序列化的内容还原为对象本身,这个过程也很是有回味的过程。当序列化的对象被还原成对象时,JVM实际上会在堆上创建新的对象,但只是让它维持着被序列化对象当时的状态。该对象的构造函数是不会运行的,它只是等待着赋值让对象回到存储的状态。当然我们在序列化时,可能会出现某些变量我们并不要求进行序列化的操作,我们只需要对该变量声明为transient就可以了,还有一个就是静态变量它是不能被被序列化的。因为所有的对象都是共享一份静态变量值的。
                                           (未完待续...........)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值