- 博客(4)
- 资源 (1)
- 收藏
- 关注
原创 11.76-11.78 使用序列化
1.覆盖readObject()检查反序列化对象的有效性,以防止安全攻击。readObject()可视为一个隐藏的构造函数。在此方法里不要直接或间接的调用对象的可覆盖的方法(因为执行这些可覆盖的方法时,子类对象的状态可能还未初始化) 注:原书有说明如何使用序列化注入不安全的对象 2.对于对象控制,优先使用枚举类代替readResolve()方法。比如使用枚举实现单例模式 注:...
2013-09-10 11:47:29 135
原创 11.75 考虑使用自定义序列化数据格式
对象的序列化机制相当于提供了另一种方式创建对象。也可以理解为如果对象支持序列化,相当于对象声明了一个隐藏的构造函数。如果对象的类结构改变了,那么以前的序列化数据进行反序列化可能导致错误。 默认的序列化将写入对象的“物理内容”。包括对象本身,以及以此对象为根节点,所能访问的所有引用对象。使用默认序列化可能导致的问题有: 1.序列化数据与序列化对象内部引用的对象的API耦合在一起,...
2013-09-10 10:42:17 182
原创 11.75 考虑使用自定义序列化数据格式
改变了,那么以前的序列化数据进行反序列化可能导致错误。 默认的序列化将写入对象的“物理内容”。包括对象本身,以及以此对象为根节点,所能访问的所有引用对象。使用默认序列化可能导致的问题有: 1.序列化数据与序列化对象内部引用的对象的API耦合在一起,如果引用对象的API改变,那么反序列化时可能出现错误 2.序列化引用对象将会消耗额外的空间(序列化数据)和时间(序列化过程) 3.在序列化过程中,可能导致内存溢出 因此建议使用自定义序列化,仅写入对象的“逻辑内容”,基本原则
2013-09-10 10:42:17 130
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人