Все зависит от того, какой тип данных приложения вы храните.Если вам нужно воссоздать Java-объекты в точности так, как они были (т.е. переменные и одно и то же состояние), вы можете сериализовать нужные вам объекты.Существует много механизмов сериализации, например, xstream, как вы упомянули.Если вы храните объекты напрямую, сработал бы один из этих механизмов.
Но, часто, вы хотите сохранить состояние вашего приложения, которое не обязательно напрямую связано с сериализацией объектов напрямую.,Если это так, вы можете записать только те данные, которые вам нужны.Тип используемого хранилища зависит от ваших потребностей.Если у вас большой объем данных, рассмотрите базу данных.Меньшее количество может работать лучше в плоском файле.
Еще одна вещь заключается в том, что избыточное хранение данных в одном файле не кажется слишком полезным.Если файл поврежден, вы потеряете обе копии, поэтому, если избыточность вызывает беспокойство, храните ее в разных местах (например, в основной и резервной базе данных).
Нет единственно правильного способа сделать это, нонадеюсь, эти идеи помогут вам начать.