How can I append to an existing java.io.ObjectStream?

append, java, objectinputstream, serialization

Solution

It is actually pretty easy to do. When you are adding to an existing stream you need to use a subclass of ObjectOutStream that overrides `writeStreamHeader` so that a second header is not written in the middle of the file. For example

class NoHeaderObjectOutputStream extends ObjectOutputStream {
  public NoHeaderObjectOutputStream(OutputStream os) {
    super(os);
  }
  protected void writeStreamHeader() {}
}

Then just use a standard ObjectInputStream to read the whole file.

Problem

As for now I will get `java.io.StreamCorruptedException` when I try to append an Object. I have searched the Internet for a way to overcome that. The answer I found so far is it can't be done. A way around this problem is to write the objects into a list and then write the list to the file. But I have to overwrite that file everytime when I add new objects. It seems not to be the optimal solution in overtime. Is there a way to append objects to an existing object stream?

Original source

Related problems