zoukankan      html  css  js  c++  java
  • 单例模式序列化与反序列化

    package com.wz.thread.resolve;

    import java.io.ObjectStreamException;
    import java.io.Serializable;
    /**
     * 序列化与反序列化
     * @author Administrator
     *
     */
    public class MyObject implements Serializable {
        private static final long serialVersionUID = 6073053711056996533L;
        
        // 内部类的方式
        private static class MyObjectHandler{
            private static final MyObject myObject = new MyObject();
        }
        
        private MyObject() {}
        public static MyObject getInstance() {
            return MyObjectHandler.myObject;
        }
        // 如果没有反序列化,读到的和存的就是两个对象
        protected Object readResolve() throws ObjectStreamException{
            System.out.println("调用了readResolve方法");
            return MyObjectHandler.myObject;
        }

    }

    package com.wz.thread.resolve;

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;

    public class SaveAndRead {
        
        public static void main(String[] args) {
            try {
                MyObject myObject = MyObject.getInstance();
                FileOutputStream fosRef = new FileOutputStream(new File("myObjectFile.txt"));
                ObjectOutputStream oosRef = new ObjectOutputStream(fosRef);
                oosRef.writeObject(myObject);
                oosRef.close();
                fosRef.close();
                System.out.println(myObject.hashCode());
            } catch (Exception e) {
                e.printStackTrace();
            }
            
            try {
                FileInputStream fisRef = new FileInputStream(new File("myObjectFile.txt"));
                ObjectInputStream iosRef = new ObjectInputStream(fisRef);
                MyObject myObject = (MyObject)iosRef.readObject();
                iosRef.close();
                fisRef.close();
                System.out.println(myObject.hashCode());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

  • 相关阅读:
    《设计模式》-原则二:里氏代换原则(LSP)
    设计模式从0开始
    net reactor加密源码保软件安全-net reactor使用教程
    python中import和from...import区别
    Python之import
    c#执行bat批处理文件,并通过线程将结果显示在控件中
    C#中双问号、双冒号等几个特殊关键字
    Eclipse debug高级技巧(转)
    Android从零开始--安装
    以另一个用户来运行程序
  • 原文地址:https://www.cnblogs.com/wadmwz/p/7822354.html
Copyright © 2011-2022 走看看