java 对象序列化

java学习笔记  对象序列化

目标:

将对象保存到磁盘中,或允许在网络中直接传输对象,对象序列化机制允许把内存中的java对象转换成与平台无关的二进制流,从而允许把这种二进制流持久保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。

含义:

对象的序列化(Serialize)指将一个java对象写入IO流中,与此对应的是,对象的反序列化(Deserialize)则指的是从IO流中恢复该java对象。

方法:

为了让某个类是可序列化的,该类必须实现如下两个接口之一:

Serializable

Externalizable

Java的很多类已经实现了Serializable,该接口是一个标记接口,实现该接口无须实现任何方法,它只是表明该类的实例是可序列化的。

所有可能在网络上传输的对象的类都应该是可序列化的,否则程序会出现异常。比如RMI(Remote Method Invoke 远程方法调用,Java EE的基础)过程中的参数和返回值;所有需要保存到磁盘里的对象都必须可序列化。

因为序列化时RMI过程的参数和返回值都必须实现的机制,而RMI又是javaEE技术的基础:所有分布式应用常常需要跨平台、跨网络,因此要求所有传递的参数、返回值必须实现序列化,因此序列化机制是javaEE平台的基础。通常建议:程序创建的每个JavaBean类都实现Serializable。

需要注意的地方

1.       反序列化机制无须通过构造器来初始化java对象。

2.       如果我们向文件中使用序列化机制写入了多个java对象,使用反序列化机制恢复对象时必须按照实际写入的顺序读取。

3.       如果一个可序列化类有多个父类(直接或间接父类),则该类的所有父类要么是可序列化的,要么有无参的构造函数---否则反序列化时会抛出InvalidClassException异常。当程序创建子类实例时,系统会隐式地为它的所有父类都创建实例(并建立和此子类的关联)。当我们反序列化某个子类的实例时,反序列化机制需要恢复其关联的父类实例。

恢复这些父类实例有两种方法:

(1)       使用反序列化机制

(2)       使用父类无参构造函数

以上两种方式,反序列化机制优先选择第一种机制。如果某个父类既不可序列化(不能使用第一种方法),又没有提供无参的构造函数(不能用第二种方法),则反序列化该子类实例时会抛出异常。、

4.    如果某个类的属性类型不是基本类型或String类型,而是另一个引用类型,则这个引用类必须是可序列化的,否则拥有该类型属性的类是不可序列化的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值