readResolve

public class Dog extends Exception {
	public static final Dog INSTANCE = new Dog();
	
	private Dog() {
		
	}
	
	public String toString() {
		return "Woof";
	}
	
	//make instance  the same one
	private Object readResolve() {
		return INSTANCE;
	}
}



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

public class CopyDog {

	/**
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
		Dog newDog = (Dog) deepCopy(Dog.INSTANCE);
		System.out.println(newDog == Dog.INSTANCE);
		System.out.println(newDog);
	}

	private static Object deepCopy(Object obj) throws Exception {
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
		new ObjectOutputStream(bos).writeObject(obj);
		ByteArrayInputStream bin = new ByteArrayInputStream(bos.toByteArray());
		return new ObjectInputStream(bin).readObject();
	}
	
	

}



你可能感兴趣的:(java)