The book Effective Java and other sources provide a pretty good explanation on how and when to use the readObject() method when working with serializable Java class
readObject() is an existing method in ObjectInputStream class.while reading object at the time of deserialization readObject method internally check whether the class object which is being deserialized having readResolve method or not if readResolve method exist then it will invoke readResolve method and return the same instance.
So the intent of writing readResolve method is a good practice to achieve pure singleton design pattern where no one can get another instance by serializing/deserializing.