title: Serialization in Java, invalid type code 00
body: <p>I'm getting an error (java.io.StreamCorruptedException: invalid type code: 00) when reading in a serialised object. Here is the class that implements serializable:</p>
  
  <pre><code>package guts;
  
  import cc.mallet.classify.*;
  import java.io.*;
  
  
  public class NaiveBayesWithID implements Serializable  {
  
  private NaiveBayes nb;
  private static final long serialVersionUID = 1;
      private static final int CURRENT_SERIAL_VERSION = 1;
  
  public NaiveBayesWithID(NaiveBayes nb) {
  this.nb = nb;
  }
  public NaiveBayesWithID(){
  this.nb = null;
  }
  
      public void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
      int version = in.readInt();
      if (version != CURRENT_SERIAL_VERSION)
          throw new ClassNotFoundException("Mismatched NaiveBayesTrainer versions: wanted " +
                  CURRENT_SERIAL_VERSION + ", got " +
                  version);
  
      //default selections for the kind of Estimator used
  
      NaiveBayesWithID test = (NaiveBayesWithID) in.readObject();
     // nb = test.returnNB();
      }
  
      public void writeObject(ObjectOutputStream out) throws IOException
      {
      out.writeInt(CURRENT_SERIAL_VERSION);
  
      //default selections for the kind of Estimator used
      out.writeObject(this);
      }
  
      public NaiveBayes returnNB(){
      return nb;
      }
  
      public void setNB(NaiveBayes nb){
          this.nb = nb;
      }
  
  }
  </code></pre>
  
  <p>and here is the stack trace:</p>
  
  <pre><code>java.io.StreamCorruptedException: invalid type code: 00
  at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1355)
  at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)
  at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)
  at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
  at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
  at java.util.ArrayList.readObject(ArrayList.java:593)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  at java.lang.reflect.Method.invoke(Method.java:597)
  at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
  at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848)
  at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
  at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
  at cc.mallet.pipe.SerialPipes.readObject(SerialPipes.java:142)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  at java.lang.reflect.Method.invoke(Method.java:597)
  at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
  at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848)
  at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
  at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
  at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)
  at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)
  at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
  at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
  at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)
  at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)
  at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
  at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
  at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)
  at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)
  at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
  at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
  at guts.NaiveBayesWithID.readObject(NaiveBayesWithID.java:29)
  at controllers.Application.predict(Application.java:481)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  at java.lang.reflect.Method.invoke(Method.java:597)
  at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:408)
  at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:403)
  at play.mvc.ActionInvoker.invoke(ActionInvoker.java:176)
  at play.server.PlayHandler$NettyInvocation.execute(PlayHandler.java:169)
  at play.Invoker$Invocation.run(Invoker.java:187)
  at play.server.PlayHandler$NettyInvocation.run(PlayHandler.java:149)
  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
  at java.util.concurrent.FutureTask.run(FutureTask.java:138)
  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)
  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)
  at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
  at java.lang.Thread.run(Thread.java:680)
  </code></pre>
  
  <p>Does anyone know how I can get more information on the error? Or which object java is expecting?</p>