`
redsky008
  • 浏览: 346628 次
  • 性别: Icon_minigender_1
  • 来自: 成都正在项目
社区版块
存档分类
最新评论

深度克隆对象

阅读更多
必须将对象序列和反序列,
而且尤其在多线程中要引用多个对象,而且多个对象之间有某种关联,
将多个对象融合进一个对象中,便于深度克隆,否则一旦牵扯关联获取某种数据。
就有可能访问不到某对象数据,

比如:序列多个对象中存在Map对象建立的链表,Key值为对象的情况,如果不深度克隆,会造成死循环(一个对象被多个进程引用,注意:并非是锁定了,本质就是死循环)。
而如果这个时候每个对象都进行深度克隆,再加入多线程的run中运算,定会造成一个Map对象访问不到另一个Map对象中的值


    public static final Object deepclone(Object src)   
    {   
        try  
        {   
            ByteArrayOutputStream baos = new ByteArrayOutputStream();   
            ObjectOutputStream out = new ObjectOutputStream(baos);   
            out.writeObject(src);   
            out.close();   
            ByteArrayInputStream bin = new ByteArrayInputStream(baos.toByteArray());   
            ObjectInputStream in = new ObjectInputStream(bin);   
            Object clone = in.readObject();   
            in.close();
            return (clone);   
        }   
        catch (ClassNotFoundException e)   
        {   
            throw new InternalError(e.toString());   
        }   
        catch (StreamCorruptedException e)   
        {   
            throw new InternalError(e.toString());   
        }   
        catch (IOException e)   
        {   
            throw new InternalError(e.toString());   
        }   
    }   
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics