美文网首页
java 之 利用序列化实现深拷贝

java 之 利用序列化实现深拷贝

作者: V5程 | 来源:发表于2017-08-16 10:47 被阅读0次

我们知道 java 在 new 一个对象的时候,其代价是比 clone 一个对象的代价是要高的,但是拷贝也不能直接用,因 java 的拷贝分为深拷贝和浅拷贝, 虽然深拷贝可以解决浅拷贝的问题,但是也会在深拷贝的时候 new 对象。有一个比较好的额代替方法是:利用序列化实现对对象的拷贝。

在内存中通过字节流的拷贝是比较容易的实现的,把原对象写入到一个字节流中,再从字节流中将其读取出来,这样读取到的对象就是原对象的一个 clone 体,而且不存浅拷贝的问题,是一个真正的深拷贝。


public class CloneUtils {  

        @SuppressWarnings("unchecked")   
        public staticT clone(T obj){
        T cloneObj = null;
        try {
          //写入字节流
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            ObjectOutputStream obs = new ObjectOutputStream(out);
            obs.writeObject(obj);
            obs.close();

            //分配内存,写入原始对象,生成新对象
            ByteArrayInputStream ios = new ByteArrayInputStream(out.toByteArray());
            ObjectInputStream ois = new ObjectInputStream(ios);

            //返回生成的新对象
            cloneObj = (T) ois.readObject();
            ois.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return cloneObj;
    }

使用该工具类的对象必须要实现Serializable接口,否则是没有办法实现克隆的。

相关文章

  • 深入JavaScript Day33 - 序列化实现深拷贝的缺点

    一、序列化实现深拷贝的缺点、手写深拷贝 1、借助序列化实现深拷贝,有哪些缺点? ①不能拷贝函数 ②不能拷贝Symb...

  • java 之 利用序列化实现深拷贝

    我们知道 java 在 new 一个对象的时候,其代价是比 clone 一个对象的代价是要高的,但是拷贝也不能直接...

  • 关于Java对象拷贝深拷贝与浅拷贝的实现

    序列化方式实现深拷贝

  • Java深度拷贝方式和性能对比

    前言 Java的深度拷贝大致分为克隆(实现Java的Clone接口)和序列化(实现Java的Serializabl...

  • 什么是浅拷贝和深拷贝?

    创建Java对象的方式包括new、反射、反序列化、拷贝,那么什么是拷贝呢?浅拷贝和深拷贝又有什么区别呢? 什么是拷...

  • 2019-05-03

    深拷贝 利用JSON.stringify和JSON.parse实现深度拷贝 function copy(obj) ...

  • iOS基础知识点(网络摘抄)

    1.父类实现深拷贝时,子类如何实现深拷贝。父类没有实现深拷贝时,子类如何实现深拷贝? 深拷贝同浅拷贝的区别:...

  • Java List的深度拷贝方法

    为了了解真正的深拷贝是如何实现的,我终于在CSDN博客中找到了通过序列化实现List的深度拷贝的方法 首先简单介绍...

  • 深拷贝、浅拷贝

    父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。 深拷贝同浅拷贝的区别:浅拷贝...

  • 面试题整理

    父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。 深拷贝同浅拷贝的区别:浅拷贝...

网友评论

      本文标题:java 之 利用序列化实现深拷贝

      本文链接:https://www.haomeiwen.com/subject/cgtirxtx.html