public void writeTo(ObjectOutputStream out) throws java.io.IOException {
   checkBuild();
   out.writeObject(wordClasses);
   out.writeObject(wordClassMap);
   out.writeObject(skipHeader);
   out.writeObject(values);
   out.writeInt(interpretationCountBits);
   out.writeInt(interpretationLengthBits);
   out.writeInt(valueCountBits);
   out.writeInt(valuePointerBits);
   out.writeInt(wordClassBits);
   out.writeInt(wordClassCount);
   out.writeInt(maxFreeValueCount);
   int entryCount = entries.length;
   out.writeInt(entryCount);
   UNKNOWN.writeTo(out);
   UNKNOWN_WORD_UPPER.writeTo(out);
   UNKNOWN_WORD_LOWER.writeTo(out);
   CHAR.writeTo(out);
   NUMBER.writeTo(out);
   for (int i = 0; i < entryCount; i++) {
     out.writeInt(hashCodes[i]);
     entries[i].writeTo(out);
   }
 }
  void readFrom(ObjectInputStream in) throws Exception {
    wordClasses = (WordClass[]) in.readObject();
    wordClassMap = (Map) in.readObject();
    skipHeader = (int[]) in.readObject();
    values = (AttributeValue[]) in.readObject();
    interpretationCountBits = in.readInt();
    interpretationLengthBits = in.readInt();
    valueCountBits = in.readInt();
    valuePointerBits = in.readInt();
    wordClassBits = in.readInt();
    wordClassCount = in.readInt();
    maxFreeValueCount = in.readInt();
    int entryCount = in.readInt();
    entries = new DictionaryEntry[entryCount];
    hashCodes = new int[entryCount];
    Runtime rt = Runtime.getRuntime();
    int i = 0;
    try {
      UNKNOWN = DictionaryEntry.readDictionaryEntryFrom(in);
      UNKNOWN_WORD_UPPER = DictionaryEntry.readDictionaryEntryFrom(in);
      UNKNOWN_WORD_LOWER = DictionaryEntry.readDictionaryEntryFrom(in);
      CHAR = DictionaryEntry.readDictionaryEntryFrom(in);
      NUMBER = DictionaryEntry.readDictionaryEntryFrom(in);

      for (i = 0; i < entryCount; i++) {
        hashCodes[i] = in.readInt();
        entries[i] = DictionaryEntry.readDictionaryEntryFrom(in);
      }
    } catch (OutOfMemoryError oem) {
      oem.printStackTrace();
      throw new Exception(oem.getMessage());
    }
    interpreterPool = new Stack();
    tokenizedInputExtensionPool = new Stack();
    checkBuild();
  }