fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.io.ByteArrayInputStream;
  4. import java.io.ByteArrayOutputStream;
  5. import java.io.ObjectInputStream;
  6. import java.io.ObjectOutputStream;
  7. import java.io.Serializable;
  8.  
  9. class Ideone {
  10.  
  11. public static class Elvis implements Serializable {
  12. { System.out.println("Initializer of " + this); }
  13. private Elvis() { System.out.println("Constructor of " + this); }
  14. public static final Elvis THE_ELVIS = new Elvis();
  15. private Object readResolve() {
  16. System.out.println("readResolve of " + this);
  17. new Exception("This is how we get called:").printStackTrace();
  18. return THE_ELVIS;
  19. }
  20. }
  21.  
  22. public static void main(String[] args) throws Exception {
  23. oout.writeObject(Elvis.THE_ELVIS);
  24. oout.close();
  25. ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(out.toByteArray()));
  26. Object object = in.readObject();
  27. System.out.println("Deserialized : " + object);
  28. }
  29. }
Success #stdin #stdout #stderr 0.13s 320704KB
stdin
Standard input is empty
stdout
Initializer of Ideone$Elvis@52e922
Constructor of Ideone$Elvis@52e922
readResolve of Ideone$Elvis@a57993
Deserialized : Ideone$Elvis@52e922
stderr
java.lang.Exception: This is how we get called:
	at Ideone$Elvis.readResolve(Main.java:17)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at java.io.ObjectStreamClass.invokeReadResolve(ObjectStreamClass.java:1104)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1810)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
	at Ideone.main(Main.java:28)