package com.jdroid.java.utils; import com.jdroid.java.exception.UnexpectedException; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class CopyUtils { @SuppressWarnings("unchecked") public static <T extends Serializable> T cloneSerializable(T object) { T cloneObject; try { ByteArrayOutputStream bout = new ByteArrayOutputStream(); ObjectOutputStream oout = new ObjectOutputStream(bout); oout.writeObject(object); byte[] bytes = bout.toByteArray(); oout.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bytes); ObjectInputStream oin = new ObjectInputStream(bin); cloneObject = (T)oin.readObject(); oin.close(); } catch (IOException | ClassNotFoundException e) { throw new UnexpectedException("Failed to clone " + object.getClass().getSimpleName() + " using serialization", e); } return cloneObject; } }