Copy an serializable object deeply : Clone « Class Definition « Java Tutorial






import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

/*
 * JBoss, Home of Professional Open Source
 * Copyright 2005, JBoss Inc., and individual contributors as indicated
 * by the @authors tag. See the copyright.txt in the distribution for a
 * full listing of individual contributors.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */

public class Main {

  // ///////////////////////////////////////////////////////////////////////
  // Cloning Methods //
  // ///////////////////////////////////////////////////////////////////////

  /**
   * Copy an serializable object deeply.
   * 
   * @param obj
   *          Object to copy.
   * @return Copied object.
   * 
   * @throws IOException
   * @throws ClassNotFoundException
   */
  public static Object copy(final Serializable obj) throws IOException, ClassNotFoundException {
    ObjectOutputStream out = null;
    ObjectInputStream in = null;
    Object copy = null;

    try {
      // write the object
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      out = new ObjectOutputStream(baos);
      out.writeObject(obj);
      out.flush();

      // read in the copy
      byte data[] = baos.toByteArray();
      ByteArrayInputStream bais = new ByteArrayInputStream(data);
      in = new ObjectInputStream(bais);
      copy = in.readObject();
    } finally {
      out.close();
      in.close();
    }

    return copy;
  }
}








5.18.Clone
5.18.1.Demonstrate the clone() method.
5.18.2.Override the clone() method.
5.18.3.Copying Objects implements Cloneable
5.18.4.Construct clone of an object
5.18.5.construct clone of an object and call constructor in the super class
5.18.6.public Object clone() throws CloneNotSupportedException
5.18.7.Cast after cloning
5.18.8.Shallow copy then deep copy
5.18.9.Uses serialization to perform deep copy cloning.
5.18.10.Deep clone Object
5.18.11.Deep clone serializing/de-serializng Clone
5.18.12.Serializable Clone
5.18.13.Manipulate properties after clone operation
5.18.14.Clone an object with clone method from parent
5.18.15.Arrays are automatically cloneable
5.18.16.A collection of utilities to workaround limitations of Java clone framework
5.18.17.Copy an serializable object deeply
5.18.18.Clone an array