首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

南极的冰疙瘩如何通过细管运到北极呢?序列化-下篇

接上篇文章:南极的冰疙瘩如何通过细管运到北极呢?序列化

5、Java对象存入文件

User类同上

Test测试类:

运行结果:

额?address是static修饰的,也序列化了?

我们改下代码,设置address为北京,去掉序列化代码,直接对刚才生成的文件进行反序列化。

运行结果:

如果address参与序列化的话,address应该是上海,所以static修饰的的属性,不参与序列化。

另外也可以对比两次生成的u.txt内容是否有变化,如果没有变化,则也可以说明问题。

u.txt文件内容如下:

其他测试操作同上,不再重复。

6、实现对象部分属性序列化

a、使用transient关键字(上面已测试)

b、添加writeObject和readObject方法

c、实现Externalizable接口

添加writeObject和readObject方法

Java调用ObjectOutputStream类检查其是否有私有的,无返回值的writeObject方法,如果有,其会委托该方法进行对象序列化。

实现Externalizable接口

User类添加方法:

Externalizable 和 Serializable比较一下:

【1】 Serializable 是标识接口,不用重写任何方法

Externalizable 接口继承于Serializable,需要重写readExternal和writeExternal方法

【2】Serializable提供了两种方式进行对象的序列化

采用默认序列化方式,将非transatient和非static的属性进行序列化

编写readObject和writeObject完成部分属性的序列化

Externalizable 接口的序列化,需要重写writeExternal和readExternal方法。

【3】Externalizable接口的实现方式一定要有默认的无参构造函数,否则会报错

Serializable接口实现,其采用反射机制完成内容恢复,没有一定要有无参构造函数的限制。

【4】相比较Serializable, Externalizable序列化、反序列更加高效,占用内存更小

在实际项目中,大部分的类还是推荐使用Serializable, 有些类可以使用Externalizable接口,如:完全控制序列的流程和逻辑;需要大量的序列化和反序列化操作,而你比较关注资源和性能。 当然,这种情况下,我们一般还会考虑第三方序列化/反序列化工具,如protobuf等进行序列化和反序列化操作。

总之需要根据项目实际情况来选择。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200717A0YM7Y00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券