title: Manual object serialization in Java
body: <p>I have a custom INIFile class that I've written that read/write INI files containing fields under a header. I have several classes that I want to serialize using this class, but I'm kind of confused as to the best way to go about doing it. I've considered two possible approaches.</p>
  
  <p>Method 1: Define an Interface like ObjectPersistent enforcing two methods like so:</p>
  
  <pre><code>public interface ObjectPersistent
  {
      public void save(INIFile ini);
      public void load(INIFile ini);
  }
  </code></pre>
  
  <p>Each class would then be responsible for using the INIFile class to output all properties out to the file.</p>
  
  <p>Method 2: Expose all properties of the classes needing serialization via getters/setters so that saving can be handling in one centralized place like so:</p>
  
  <pre><code>public void savePlayer(Player p)
  {
      INIFile i = new INIFile(p.getName() + ".ini");
      i.put("general", "name", p.getName());
      i.put("stats", "str", p.getSTR());
  
      // and so on
  }
  </code></pre>
  
  <p>The best part of method 1 is that not all properties need to be exposed, so encapsulation is held firm. What's bad about method 1 is that saving isn't technically something that the player would "do". It also ties me down to flat files via the ini object passed into the method, so switching to a relational database later on would be a huge pain.</p>
  
  <p>The best part of method 2 is that all I/O is centralized into one location, and the actual saving process is completely hidden from you. It could be saving to a flat file or database. What's bad about method 2 is that I have to completely expose the classes internal members so that the centralized serializer can get all the data from the class.</p>
  
  <p>I want to keep this as simple as possible. I prefer to do this manually without use of a framework. I'm also definitely not interested in using the built in serialization provided in Java. Is there something I'm missing here? Any suggestions on what pattern would be best suited for this, I would be grateful. Thanks.</p>