防止单例在反序列化后成多例
来源:互联网 发布:新网域名证书生成 编辑:程序博客网 时间:2024/04/30 06:40
无意中看到这个方法,突然对JAVA很失望,没有任何接口,就这么空降般的一个私有方法,像类似的方法还有多少?n久以后我可能忘记,就在这做个备忘吧!
package com.godway.test;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.InputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.ObjectStreamException;import java.io.Serializable;/** * 防止单例在反序列化后成多例 * readResolve方法测试 * @author godway */public class TestSingleton implements Serializable {private static final long serialVersionUID = 810160916916358307L;// 单例public static final TestSingleton instance = new TestSingleton();public static TestSingleton getInstance(){return instance;}private TestSingleton(){}/** * 防止单例对象在序列化后生成“多例” * * @return * @throws ObjectStreamException */private Object readResolve() throws ObjectStreamException {return instance;}/** * 序列化克隆 * @return * @throws Exception */public TestSingleton deepCopy() throws Exception{ByteArrayOutputStream os = new ByteArrayOutputStream();ObjectOutputStream oos = new ObjectOutputStream(os);oos.writeObject(TestSingleton.getInstance());InputStream is = new ByteArrayInputStream(os.toByteArray());ObjectInputStream ois = new ObjectInputStream(is);TestSingleton test = (TestSingleton) ois.readObject();return test;}public static void main(String args[]) {/** * 这样打印出的TestSingleton对象地址一致, * 说明依然是单例对象 * 把readResolve方法注释掉再来一遍看看呢? */System.out.println(TestSingleton.getInstance());try {System.out.println(TestSingleton.getInstance().deepCopy());} catch (Exception e) {e.printStackTrace();}}}
0 0
- 防止单例在反序列化后成多例
- 单例模式,防止反射和反序列化漏洞
- Java设计模式(一):单例模式,防止反射和反序列化漏洞
- 单例防止暴力反射和反序列化创建对象
- Java设计模式(一):单例模式,防止反射和反序列化漏洞
- 单例设计模式总结-5种常见写法+防止发射反序列化
- 防止单例模式被攻击
- 单例事件--防止事件重复注册
- 如何破坏单例模式?如何防止?
- 当单例遇到了反序列化
- 【转载】JAVA序列化/反序列化与单例
- 单例模式及其序列化/反序列化
- 单例的序列化与反序列化
- private,单例,同时可以防止被继承
- Dojo单例模式之防止TabContainer实例化多次
- 线程并发时,防止单例出现多个实例。
- 枚举单例模式如何防止反射攻击
- 如何防止单例模式被JAVA反射攻击
- 【伯乐在线】成为谷歌软件工程师你需要准备什么?
- 组件重写小例子-- Vgroup 变为从下到上排列
- 五步教你实现使用Nginx+uWSGI+Django方法部署Django程序
- 全国省市县数据库
- 研究一下netty4
- 防止单例在反序列化后成多例
- LRU Cache
- 创建sitemap的步骤
- 差网络环境模拟工具 Clumsy
- 多线程内存泄露
- Bundle MVC4解决方法集合
- PCRE使用
- VC++ DirectShow的使用
- Random number for GPU