All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.googlecode.gwt.test.rpc.DeepCopy Maven / Gradle / Ivy

There is a newer version: 0.63
Show newest version
package com.googlecode.gwt.test.rpc;

import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

/**
 * Utility for making deep copies (vs. clone()'s shallow copies) of objects. Objects are first
 * serialized and then deserialized. Error checking is fairly minimal in this implementation. If an
 * object is encountered that cannot be serialized (or that references an object that cannot be
 * serialized) an error is printed to System.err and null is returned. Depending on your specific
 * application, it might make more sense to have copy(...) re-throw the exception.
 * 
 */
class DeepCopy {

   /**
    * Returns a copy of the object, or null if the object cannot be serialized.
    */
   @SuppressWarnings("unchecked")
   public static  T copy(T orig) throws Exception {
      ObjectOutputStream out = null;
      ObjectInputStream in = null;
      try {
         // Write the object out to a byte array
         FastByteArrayOutputStream fbos = new FastByteArrayOutputStream();
         out = new ObjectOutputStream(fbos);
         out.writeObject(orig);
         out.flush();
         out.close();

         // Retrieve an input stream from the byte array and read
         // a copy of the object back in.
         in = new ObjectInputStream(fbos.getInputStream());
         return (T) in.readObject();
      } finally {
         if (out != null)
            out.close();

         if (in != null)
            in.close();
      }
   }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy