public static Object defaultRead(
      ObjectInput input,
      Object obj,
      StreamingClass streaming,
      ClassMetaData metaData,
      ObjectSubstitutionInterface substitution)
      throws IOException {

    try {

      ClassMetaDataSlot[] slots = metaData.getSlots();
      for (int slotNR = 0; slotNR < slots.length; slotNR++) {
        ClassMetaDataSlot slot = metaData.getSlots()[slotNR];
        if (slot.getPrivateMethodRead() != null) {
          readSlotWithMethod(slot, streaming.getKeyFields()[slotNR], input, obj, substitution);
        }
        //        		else if (slot.getPrivateMethodWrite() != null)
        //        		{
        //        		   readSlotWithDefaultMethod(slot, streaming.getKeyFields()[slotNR], input,
        // obj);
        //        		}
        else {
          readSlotWithFields(streaming.getKeyFields()[slotNR], slot, input, obj);
        }
      }

      return obj;
    } catch (ClassNotFoundException e) {
      throw new SerializationException("Error reading " + obj.getClass().getName(), e);
    }
  }
  public static void defaultWrite(
      ObjectOutput output,
      Object obj,
      ClassMetaData metaClass,
      ObjectSubstitutionInterface substitution)
      throws IOException {
    ClassMetaDataSlot slots[] = metaClass.getSlots();

    for (int slotNr = 0; slotNr < slots.length; slotNr++) {
      if (slots[slotNr].getPrivateMethodWrite() != null) {
        writeSlotWithMethod(slots[slotNr], output, obj, substitution);
      } else {
        writeSlotWithFields(slots[slotNr], output, obj, substitution);
      }
    }
  }