第七十四条 谨慎地实现 serizable 接口


我们把 String 或 八大基本类型的值保存在内存,或保存到本地file文件夹里,或通过网络传给服务端,比较容易;但我们自定义的 class 对象怎么办,他们直接保存到本地,保存不了他们的属性的值,比如 class Student 对象,里面 age 和 address 两个属性;有个对象 student,age 为 13,address 为 北京,我们想把student 的值直接保存到数据库或file文本中,不行。可以把它的属性值拿出来,拼接成一个字符串,然后保存。有没有办法直接保存对象值呢?答案就是序列化。

让一个类实现序列化非常简单,在它的声明中加入 implements Serializable 即可,该类就可以被序列化了。由于一行代码就可以搞定了序列化,往往让人觉得很容易,但,实现起来容易,开销也不大,看似很美好,实际上后期维护的话费却特别大。

序列化有以下几个弊端:
一、实现序列化以后,一旦公开,类的可变性就降低了,没那么灵活了;
二、增加了出现bug和漏洞的可能,通过序列化实现读取内容,可能会打破构造方法的限制;
三、随着版本的发型,后期测试工作会越来越大;

据某些资料显示,由于 如序列化存储安全、反序列化安全、传输安全等问题,大概至少三分之一的漏洞是由序列化引起的,所以我们自己在并非特别了解序列化的前提下,还是尽量避免使用它。目前有消息说正在开发一个小型的序列化框架来代替老式的笨重的序列化方式,技术也是不停的更新的。在新的更成熟的技术出现之前,可以用其他方法来代替序列化的功能:我们可以把值用 String 的格式保存,然后读取,再解析为对象。

猜你喜欢

转载自blog.csdn.net/Deaht_Huimie/article/details/85141908