反序列化对象
来源:互联网 发布:阿里云 外高桥 机房 编辑:程序博客网 时间:2024/04/20 08:07
下面程序为Singleton类提供了readResolve()方法,当JVM反序列化地恢复一个新对象时,系统会自动调用这个readResolve()方法返回指定好的对象,从而保证系统通过反序列化机制不会产生多个对象。运行下面程序,程序判断singleton == singleton2 是否相同将输出true,这表明反序列化机制恢复出来的Java对象依然是原来的Java对象。通过这种方式可保证反序列化时Singleton依然是单例类。
import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.ObjectStreamException;import java.io.Serializable;class Singleton implements Serializable {private static final long serialVersionUID = 327838450350496302L;private static Singleton instance;private String name;private Singleton(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public static Singleton getInstance(String name) {if (instance == null) {instance = new Singleton(name);}return instance;}// 提供readResolve()方法private Object readResolve() throws ObjectStreamException {return instance;}}public class SingletonTest {public static void main(String[] args) throws Exception {// 调用静态方法来获取wolf实例Singleton singleton = Singleton.getInstance("NorhtWolf");System.out.println("Wolf对象创建完成~~~");Singleton singleton2 = null;ObjectOutputStream objectOutputStream = null;ObjectInputStream objectInputStream = null;try {// 创建对象输出流objectOutputStream = new ObjectOutputStream(new FileOutputStream("b.bin"));// 创建对象输入流objectInputStream = new ObjectInputStream(new FileInputStream("b.bin"));// 序列化输入Java对象objectOutputStream.writeObject(singleton);objectOutputStream.flush();// 反序列化恢复Java对象singleton2 = (Singleton) objectInputStream.readObject();System.out.println(singleton2.getName());// 两个对象的实例变量值完全相等System.out.println(singleton.equals(singleton2));// 两个对象不相同System.out.println(singleton == singleton2);} catch (Exception e) {} finally {if (objectOutputStream != null) {objectOutputStream.close();}if (objectInputStream != null) {objectInputStream.close();}}}}
- 反序列化对象
- 对象序列化与反序列化
- 对象序列化、反序列化
- 对象 序列化 反序列化
- 序列化与反序列化对象
- 对象序列化和反序列化
- 对象序列化和反序列化
- 对象序列化反序列化例子
- JAVA对象序列化,反序列化
- 对象序列化与反序列化
- 对象序列化与反序列化
- Silverlight 对象 序列化 反序列化
- 对象序列化和反序列化
- 对象序列化 与反序列化
- 对象序列化反序列化例子
- 对象序列化与反序列化
- 对象序列化和反序列化
- 对象序列化和反序列化
- UNIX TOOLBOX - 中文版
- c#工厂模式与抽象工厂模式
- Python的包管理工具easy_install, setuptools, pip,distribute介绍
- poj 2729.Robocode
- vc CFileDialog 打开文件默认文件规则
- 反序列化对象
- 使用C#开发ActiveX控件,并打包cab应用于web
- 开发人员一定要加入收藏夹的网站
- linux MBR
- 拓扑排序+DFS
- 地图服务标注显示乱码问题
- OpenGL之 小小太阳系 堆栈操作
- 【Spring专题-③】AOP浅析(二)
- 替换GINA.DLL实现自己的登陆界面