Java 序列化机制解析

本文详细解析了Java序列化机制,包括序列化和反序列化的概念、用途,以及实现序列化的方式。通过实现Serializable接口的默认序列化和定制序列化,讨论了哪些数据会被序列化。还介绍了基于Externalizable接口的序列化,以及序列化带来的网络传输安全性和类自身封装的安全性问题。最后,总结了序列化机制的重要性及注意事项。
摘要由CSDN通过智能技术生成

Java序列化机制解析

序列化及反序列化介绍

序列化是指把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。序列化后的字节流保存了Java对象的状态以及相关的描述信息。客户端从文件中或网络上获得序列化后的对象字节流后,根据字节流中所保存的对象状态及描述信息,通过反序列化重建对象。本质上讲,序列化就是把实体对象状态按照一定的格式写入到有序字节流,反序列化就是从有序字节流重建对象,恢复对象状态。序列化机制的核心作用就是对象状态的保存与重建。

序列化机制的用途

通过对象的序列化我们可以得到对象状态信息的字节流数据,这些数据代表了当前对象的状态。当对象转化成二进制数据流之后,我们可以通过多种方式处理它,比如可以通过Socket将数据发送的远程主机,又或者保存的本地文件中以期后用。同时,当我们通过某种方式获取了对象序列化之后的二进制数据之后,通过反序列化机制实现对象的重建,恢复之前对象的状态。由此可知,序列化后的字节流可以应用到任何想要重建对象的地方,您所需要的就是获取这些字节流数据。

Java序列化机制解析

实现序列化的方式

Java API提供了对序列化的支持,要实现对象的序列化和反序列化,基本上包括两个步骤:

1.声明对象具有可序列化的能力

2.通过Java API实现具体的序列化处理

Java语言中,声明对象具有可序列化的能力主要有两种方式:其一,实现Serializable接口;其二,实现Externalizable接口。两者既有区别又有联系。

Serializable接口在JDK源码中定义如下:

 

 

JavaJDK1.1开始支持对象的序列化机制,有上图的源码可知,Serializable接口没有声明任何方法,实现该接口的Java类不需要对任何方法提供实现(默认情况下,定制序列化时除外),因此,该接口仅仅是一个”mark interface”,实现该接口意味着告知JVM该对象可以序列化。Java序列化机制要求所有具备序列化的对象必须实现该接口,否则是不能被序列化的,如果对于没有实现该接口的对象进行序列化时,Java API会抛出异常,无法进行序列化。

Serializable接口提供了默认的序列化行为,在默认情况下,开发人员只需实现该接口,无需进行其他额外的操作,即可实现的对象的序列化。当然,所谓默认的处理,必然隐藏着对序列化对象的默认操作,比如对象的哪些属性被序列化。默认情况下,只对对象中非静态的字段以及非瞬时的字段进行序列化,其他的字段是不允许被序列化的。这种情

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值