code: protected void doReadObject(final ObjectInputStream stream) throws IOException, ClassNotFoundException {
          final GetField readFields = stream.readFields();
  
          for (final String fieldName : getFieldNamesInAdditionToId()) {
              final Object value = readFields.get(fieldName, null);
              setField(fieldName, value);
          }
  
          // fix issue of deserializing _rowNumber in it's previous int form
          final long rowNumber;
          final ObjectStreamField legacyRowNumberField =
                  readFields.getObjectStreamClass().getField(getFieldNameForOldId());
          if (legacyRowNumberField != null) {
              rowNumber = readFields.get(getFieldNameForOldId(), -1);
          } else {
              rowNumber = readFields.get(getFieldNameForNewId(), -1L);
          }
  
          setField(getFieldNameForNewId(), rowNumber);
      }
docs: Subclasses should call this method within their
  readObject(ObjectInputStream) invocations
  
  @param stream
  @throws IOException
  @throws ClassNotFoundException