docs: @Override
      public void readObject(DataInputStream dataInputStream, ObjectManagerState objectManagerState) throws ObjectManagerException, IOException
      {
      	final String methodName = "readObject";
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(this, tc, methodName, "bytes available==" + dataInputStream.available());
  
          super.readObject(dataInputStream, objectManagerState);
  
          long serialVersionUIDRead = dataInputStream.readLong();
         
          _uniqueID = dataInputStream.readLong();
          _streamID = dataInputStream.readLong();
          _lockID = dataInputStream.readLong();
          _referredID = dataInputStream.readLong();
          _sequence = dataInputStream.readLong();
          _expiryTime = dataInputStream.readLong();
  
          // redeliveredCount was added for serialVersionUIDV1 and later.
          // otherwise set it to 0.
          if (serialVersionUIDRead == serialVersionUIDV0)
            _redeliveredCount = 0;
          else
            _redeliveredCount = dataInputStream.readInt();
  
          _storageStrategy = dataInputStream.readInt();
          _priority = dataInputStream.readInt();
          _persistentSize = dataInputStream.readInt();
          _maxDepth = dataInputStream.readInt();
  
          _canExpireSilently = dataInputStream.readBoolean();
          _containsExpirables = dataInputStream.readBoolean();
  
          // Read the strings in but only if they were
          // not null on the write.
          boolean read = dataInputStream.readBoolean();
          if (read)
          {
              _type = dataInputStream.readUTF();
          }
          read = dataInputStream.readBoolean();
          if (read)
          {
              _className = dataInputStream.readUTF();
          }
  
          // In order to read in the tran ID we need to read
          // its length so we can create the byte array.
          int length = dataInputStream.readInt();
  
          if (length != -1)
          {
              _transactionId = new byte[length];
  
              dataInputStream.readFully(_transactionId, 0, length);
          }
  
          // Call the Tokens to read themselves in but
          // only if the flag preceding them says that
          // they exist in the stream.
          read = dataInputStream.readBoolean();
          if (read)
          {
              _streamListToken = Token.restore(dataInputStream, objectManagerState);
          }
          read = dataInputStream.readBoolean();
          if (read)
          {
              _itemListToken = Token.restore(dataInputStream, objectManagerState);
          }
          read = dataInputStream.readBoolean();
          if (read)
          {
              _rawDataToken = Token.restore(dataInputStream, objectManagerState);
          }
          read = dataInputStream.readBoolean();
          if (read)
          {
              _streamListEntryToken = Token.restore(dataInputStream, objectManagerState);
          }
          read = dataInputStream.readBoolean();
          if (read)
          {
              _itemListEntryToken = Token.restore(dataInputStream, objectManagerState);
          }
  
          // _deliveryDelayTime was added for serialVersionUID=2 and serialVersionUIDV1 
          // in releases 8.5.6 and higher.
          if (serialVersionUIDRead == serialVersionUIDV0) {
          	_deliveryDelayTime = 0;
          } else if (serialVersionUIDRead == serialVersionUIDV1) {
          	
          	// _deliveryDelayTime was initially added without changing serialVersionUID, so 
          	// PersistableMetaData was stored using serialVersionUIDV1 and may or may not contain 
          	// _deliveryDelayTime. If there are fewer than 8 bytes remaining in the dataInputStream 
          	// then we can safely assume the _deliveryDelayTime was not stored.
              if (dataInputStream.available() >= 8 && _className.equals("com.ibm.ws.sib.processor.impl.store.items.MessageItem")) {
                  _deliveryDelayTime = dataInputStream.readLong();
                  // We could have just read garbage from spare space in the ObjectStore.
                  _deliveryDelayTimeIsSuspect = true;
              }
              else 
          	    _deliveryDelayTime = 0;  
          } else {
          	_deliveryDelayTime = dataInputStream.readLong();
          }
  
          // Reset _estimatedLength so that it is re-calculated
          // when it is needed.
          _estimatedLength = -1;
          
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(this, tc, methodName, "serialVersionUIDRead="+serialVersionUIDRead+" bytes available==" + dataInputStream.available());
      }