序列化和反序列化的对单例破坏的防止及其原理
ObjectInputStream.readObject() -> ObjectInputStream.readObject0() -> readOrdinaryObject() -> 如果可序列化,.newInstance() 反射创建了新对象,所以单例破坏,如果添加了readResolve()就好了,是会继续调用 hasReadResolveMethod() ,有反射调用,重置obj再返回,单例就不会破坏了
序列化和反序列化的对单例破坏的防止及其原理
ObjectInputStream.readObject() -> ObjectInputStream.readObject0() -> readOrdinaryObject() -> 如果可序列化,.newInstance() 反射创建了新对象,所以单例破坏,如果添加了readResolve()就好了,是会继续调用 hasReadResolveMethod() ,有反射调用,重置obj再返回,单例就不会破坏了
本文标题:Android面试
本文链接:https://www.haomeiwen.com/subject/udlbsctx.html
网友评论