对象序列化

本文介绍了 Java 中的对象序列化概念及其应用场景,包括远程方法调用及 JavaBeans 状态的保存与恢复。详细解释了 ObjectOutputStream 和 ObjectInputStream 类的作用,以及序列化过程中需要注意的关键问题。

对象序列化的概念加入到语言中为了提供对两种主要特性的支持:

1 、远程方法调用

2 、 Java Beans 状态的保存与恢复

 

 

ObjectInput 接口继承 DataInput 接口

ObjectOutput 接口继承 DataOutput 接口

ObjectOutputStream 类实现了 DataOutput,ObjectOutput

ObjectInputStream 类实现了 DataInput,ObjectInput

 

 

ObjectOutputStream.defaultWriteObject() :将当前类的非静态和非瞬态字段写入此流。

ObjectInputStream.defaultReadObject() :从此流读取当前类的非静态和非瞬态字段。

 

反序列化时,该序列化对象所对应的类一定要在反序列化运行环境的classpath中找得到,不然在读(readObject()) 序列化文件时因找不到相应的Class会抛出ClassNotFoundException异常。

 

一个类实现了序列化接口,则该类里的所有对象都要求实现序列化接口,不然在进行序列化进会抛异常。因为序列化好比深层克隆,它会序列化各个对象属性里的对象属性。 如果一个属性没有实现可序列化,而我们又没有将其用transient 标识, 则在对象序列化的时候, 会抛出java.io.NotSerializableException 异常。

使用 Serializable序列化

为了序列化一个对象,首先要创建某些 OutputStream 对象,然后将其封装在一个 ObjectOutput Stream 对象内。这时,只需调用 writeObject() 即可将对象序列化,并将其发送给 OutputStream 。要将一个序列重组为一个对象,需要将一个 InputStream 封装在 ObjectInputStream 内,然后调用readObject() 。和往常一样,我们最后获得的是指向一个向上转型为 Object 的句柄,所以必须向下转型,以便能够直接对其进行设置。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值