资讯专栏INFORMATION COLUMN

如何正确使用Java序列化?

Yujiaao / 776人阅读

摘要:前言什么是序列化将对象编码成一个字节流,这样一来就可以在通信中传递对象了。比如在一台虚拟机中被传递到另一台虚拟机中,或者字节流存储到磁盘上。比如增加一个不是很重要的工具方法,自动产生的序列版本也会发生变化,则会出现序列版本不一致的情况。

前言
  什么是序列化:将对象编码成一个字节流,这样一来就可以在通信中传递对象了。比如在一台虚拟机中被传递到另一台虚拟机中,或者字节流存储到磁盘上。

  “关于Java的序列化,无非就是简单的实现Serializable接口”这样的说法只能说明停留在会用的阶段,而我们想要走的更远往往就需要了解更多的东西,比如:为什么要实现序列化?序列化对程序的安全性有啥影响?如何避免多余的序列化?.....

  本文主要参考资料《Effective Java》,其中代码除了只作部分说明,不能运行外,剩余代码都是亲自实践过的!

一、序列化代价
虽然实现Serializable很简单,但是为了序列化而付出的长期开销往往是实实在在的。实现Serializable接口而付出的最大代价是,一旦一个类被发布,就大大降低了“改变这个类的实现”的灵活性。

  问:这个灵活性具体是指什么呢?

  即一旦类实现了Serializable接口,并且这个类被广泛地使用,往往必须永远支持这种序列化形式,如果使用默认的序列化形式,那么这种序列化形式将永远地束缚在该类最初的内部表示法上,换句话说,一旦接受了默认的序列化形式,这个类中私有的和包级私有的实例域都变成导出的API的一部分,这显然是不符合的。这也就是实现序列化往往需要考虑到的几个代价,具体请往下看!

1、可能会导致InvalidClassException异常
  如果没有显式声明序列版本UID,对对象的需求进行了改动,那么兼容性将会遭到破坏,在运行时导致InvalidClassException。比如:增加一个不是很重要的工具方法,自动产生的序列版本UID也会发生变化,则会出现序列版本UID不一致的情况。所以最好还是显式的增加序列版本号UID。

  对User JavaBean实现Serializable接口,增加固定的序列版本号

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74172.html

相关文章

  • 【修炼内功】[Java8] 使用Optional的正确姿势及列化问题

    摘要:本文已收录修炼内功跃迁之路的为解决空的问题带来了很多新思路,查看源码,实现非常简单,逻辑也并不复杂。 本文已收录【修炼内功】跃迁之路 showImg(https://segmentfault.com/img/bVbrCvp?w=852&h=480); Java8的Optional为解决空的问题带来了很多新思路,查看Optional源码,实现非常简单,逻辑也并不复杂。Stuart Ma...

    Ajian 评论0 收藏0
  • 你和阿里资深架构师之间,差的不仅仅是年龄(进阶必看)

    摘要:导读阅读本文需要有足够的时间,笔者会由浅到深带你一步一步了解一个资深架构师所要掌握的各类知识点,你也可以按照文章中所列的知识体系对比自身,对自己进行查漏补缺,觉得本文对你有帮助的话,可以点赞关注一下。目录一基础篇二进阶篇三高级篇四架构篇五扩 导读:阅读本文需要有足够的时间,笔者会由浅到深带你一步一步了解一个资深架构师所要掌握的各类知识点,你也可以按照文章中所列的知识体系对比自身,对自己...

    huaixiaoz 评论0 收藏0
  • 这些Java面试题必须会-----鲁迅

    摘要:事实上,所谓的同步就是指阻塞式操作,而异步就是非阻塞式操作。中可以通过设值注入方法注入和构造器注入实现,推荐使用的方式为设值注入。 写在前面 春天来了,万物复苏的季节到了. 许多程序猿安奈不住生理需求,我要涨工资,我要跳槽. 毕竟金三银四嘛. 那么要从众多的面试者中获得求职机会,我们就要面对很多的面试题. 程序猿是最烦面试题的.面试的公司也烦,面试的人也烦. 但是没办法.面试的人鱼龙混...

    aristark 评论0 收藏0
  • IPC机制之AIDL

    摘要:在我的理解里,定向是这样的中的定向表示了在跨进程通信中数据的流向,其中表示数据只能由客户端流向服务端,表示数据只能由服务端流向客户端,而则表示数据可在服务端与客户端之间双向流通。一类是用来定义方法接口,以供系统使用来完成跨进程通信的。 正文 1,概述 AIDL是一个缩写,全称是Android Interface Definition Language,也就是Android接口定义语言。...

    骞讳护 评论0 收藏0
  • Effective Java 第三版 全文翻译

    摘要:本章中的大部分内容适用于构造函数和方法。第项其他方法优先于序列化第项谨慎地实现接口第项考虑使用自定义的序列化形式第项保护性地编写方法第项对于实例控制,枚举类型优先于第项考虑用序列化代理代替序列化实例附录与第版中项目的对应关系参考文献 effective-java-third-edition 介绍 Effective Java 第三版全文翻译,纯属个人业余翻译,不合理的地方,望指正,感激...

    galois 评论0 收藏0

发表评论

0条评论

Yujiaao

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<