Java IO之对象序列化(二)

本文详细对比了Serializable与Externalizable接口实现序列化的区别,并介绍了如何使用transient关键字控制序列化过程,以及如何序列化一组对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Serializable 接口与 Externalizable 接口实现序列化的区别

    在上一篇文章中,已经向大家介绍了对象序列化与反序列化,在文章中指出了对象如果要想被序列化,就必须实现 Serializable 接口或者 Externalizable 接口,其中 Externalizable 是 Serializable 的子接口

    既然两个接口都可以实现对象的序列化操作,那么这两个接口有什么不同呢?接下来就向大家介绍一下两个接口在实现对象序列化时两者的区别:

No.区别Serializable 接口Externalizable 接口
1实现复杂度实现简单,Java对其有内建支持实现复杂,由开发人员自己完成
2执行效率所有对象由 Java 同意保存,性能较低开发人员决定哪个对象保存,可能的速度提升
3保存信息保存时占用空间大部分存储,可能的空间减少

    上面的表格列出了两个接口在三个方面上(实现复杂度、执行效率、保存信息)的区别。当然,在 Java 开发中,使用最多的接口还是 Serializable 接口。因为在序列化操作中,如果不希望某个属性被序列化下来,可以使用 transient 关键字声明来实现效果。transient 关键字 + Serializable 接口完全可以取代 Externalizable 接口的功能。

    transient 关键字,简单地说,就是让某些被修饰的成员属性变量不被序列化。

    注意:transient 关键字只能修饰变量,而不能修饰方法和类,本地变量是不能被 transient 关键字修饰的。变量如果是用户自定义类变量,则该类需要实现 Serializable 接口。

二、序列化一组对象

    对象在输出时只提供了一个对象的输出操作(writeObject(Object obj)),并没有提供多个对象的输出,所以如果现在要同时序列化多个对象的时候就可以使用对象数组进行操作,因为数组属于引用数据类型,可以直接使用 Object 类型进行接收。

    如果要保存多个对象,则最好使用对象数组的形式完成

三、小结

    1、对象序列化并不一定都向文件中保存,也有可能面向于其他的输入或输出;

    2、被序列化时,对象必须实现 Serializable 接口,如果某个属性不希望被保存下来,则可以使用 transient 关键字声明(详见参考文章);

    3、ObjectOutputStream 是序列化对象,ObjectInputStream 是反序列化对象;

    4、Externalizable 接口的作用:开发人员手工实现序列化的操作;

    5、使用序列化保存一组数组的时候要使用对象数组的形式操作。

    希望此篇文章对大家在学习上有所帮助,若有不对之处也请指出!

参考文章:

http://blog.youkuaiyun.com/u013207877/article/details/52572975

https://www.cnblogs.com/chenpi/p/6185773.html#_label0


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值