import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;
public class Main {
SerializableSingleton singleton = SerializableSingleton.INSTANCE;
String data
= "¬í\0\5sr\0\25SerializableSingleton\0\0\0\0\0\0\0\1\2\0\1L\0\1at\0\10" + "LSneaky;xpsr\0\6SneakyOÎæJ&r\234©\2\0\1L\0\1rt\0\27LSerializableSingleton;xpq\0~\0\2";
SerializableSingleton official = (SerializableSingleton)oos.readObject();
System.
out.
println(official
+"\t"+(official
== singleton
)); Object inofficial
= Sneaky.
instance.
r; System.
out.
println(inofficial
+"\t"+(inofficial
== singleton
)); }
}
}
static Sneaky instance;
SerializableSingleton r;
Sneaky(SerializableSingleton s) {
r = s;
}
private Object readResolve
() { return instance = this;
}
}
public static final SerializableSingleton INSTANCE = new SerializableSingleton();
private static final long serialVersionUID = 1L;
private SerializableSingleton() {
System.
out.
println("SerializableSingleton initialized"); }
protected Object readResolve
() { System.
out.
println("replacing "+this+" with "+INSTANCE
); return INSTANCE;
}
}
aW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07CmltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwppbXBvcnQgamF2YS5pby5PYmplY3RJbnB1dFN0cmVhbTsKaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwoKcHVibGljIGNsYXNzIE1haW4gewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIElPRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIHsKICAgICAgICBTZXJpYWxpemFibGVTaW5nbGV0b24gc2luZ2xldG9uID0gU2VyaWFsaXphYmxlU2luZ2xldG9uLklOU1RBTkNFOwoKICAgICAgICBTdHJpbmcgZGF0YSA9ICLCrMOtXDBcNXNyXDBcMjVTZXJpYWxpemFibGVTaW5nbGV0b25cMFwwXDBcMFwwXDBcMFwxXDJcMFwxTFwwXDFhdFwwXDEwIgogICAgICAgICAgICArICJMU25lYWt5O3hwc3JcMFw2U25lYWt5T8OOw6ZKJnJcMjM0wqlcMlwwXDFMXDBcMXJ0XDBcMjdMU2VyaWFsaXphYmxlU2luZ2xldG9uO3hwcVwwflwwXDIiOwogICAgICAgIHRyeShCeXRlQXJyYXlJbnB1dFN0cmVhbSBiYW9zID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGRhdGEuZ2V0Qnl0ZXMoImlzby04ODU5LTEiKSk7CiAgICAgICAgICAgIE9iamVjdElucHV0U3RyZWFtIG9vcyA9IG5ldyBPYmplY3RJbnB1dFN0cmVhbShiYW9zKSkgewogICAgICAgICAgICBTZXJpYWxpemFibGVTaW5nbGV0b24gb2ZmaWNpYWwgPSAoU2VyaWFsaXphYmxlU2luZ2xldG9uKW9vcy5yZWFkT2JqZWN0KCk7CgogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ob2ZmaWNpYWwrIlx0Iisob2ZmaWNpYWwgPT0gc2luZ2xldG9uKSk7CiAgICAgICAgICAgIE9iamVjdCBpbm9mZmljaWFsID0gU25lYWt5Lmluc3RhbmNlLnI7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpbm9mZmljaWFsKyJcdCIrKGlub2ZmaWNpYWwgPT0gc2luZ2xldG9uKSk7CiAgICAgICAgfQogICAgfQoKfQpjbGFzcyBTbmVha3kgaW1wbGVtZW50cyBTZXJpYWxpemFibGUgewogICAgc3RhdGljIFNuZWFreSBpbnN0YW5jZTsKCiAgICBTZXJpYWxpemFibGVTaW5nbGV0b24gcjsKCiAgICBTbmVha3koU2VyaWFsaXphYmxlU2luZ2xldG9uIHMpIHsKICAgICAgICByID0gczsKICAgIH0KCiAgICBwcml2YXRlIE9iamVjdCByZWFkUmVzb2x2ZSgpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UgPSB0aGlzOwogICAgfQp9CmNsYXNzIFNlcmlhbGl6YWJsZVNpbmdsZXRvbiBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSB7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNlcmlhbGl6YWJsZVNpbmdsZXRvbiBJTlNUQU5DRSA9IG5ldyBTZXJpYWxpemFibGVTaW5nbGV0b24oKTsKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwoKICAgIHByaXZhdGUgU2VyaWFsaXphYmxlU2luZ2xldG9uKCkgewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VyaWFsaXphYmxlU2luZ2xldG9uIGluaXRpYWxpemVkIik7CiAgICB9CiAgICBwcm90ZWN0ZWQgT2JqZWN0IHJlYWRSZXNvbHZlKCkgewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmVwbGFjaW5nICIrdGhpcysiIHdpdGggIitJTlNUQU5DRSk7CiAgICAgICAgcmV0dXJuIElOU1RBTkNFOwogICAgfQp9Cg==