code: private Object readDataField(int bytes, int datalen)
                      throws IOException,
                      ClassNotFoundException {
  
          Object value = null;
  
          deserializeTimer.reset();
          if (bytes == 0) { // yes, need to deserialize
              if ((databuf == null) || (databuf.length < datalen)) {
                  databuf = new byte[datalen];
              }
  
              deserialize_time += deserializeTimer.elapsed(); // careful not to add physical i/o into time
              filemgr.read(databuf, 0, datalen); // read data
              deserializeTimer.reset();
  
              value = SerializationUtility.deserialize(Arrays.copyOf(databuf, datalen), htoddc.cacheName);
              bytes_deserialized += datalen; // we don't count application deserialzation
  
          } else {
              value = new byte[datalen]; // space for data
              deserialize_time += deserializeTimer.elapsed(); // avoid counting physical i/o
              filemgr.read((byte[]) value); // read data
              deserializeTimer.reset();
          }
          deserialize_time += deserializeTimer.elapsed();
  
          //
          // If static deserializion buffer bloats things get expensive.  Force 
          // reallocation if a huge object is read in.
          //
          if (datalen > 100000) {
              databuf = null;
          }
  
          return value;
      }
docs: ***********************************************************************
  Read the data portion of the entry. This assumes that the caller as positioned
  the seek point in the file.
  ***********************************************************************