public Object getDeserialized(boolean copyOnRead) {
      if (isValueByteArray()) {
        if (copyOnRead) {
          // TODO move this code to CopyHelper.copy?
          byte[] src = (byte[]) rawValue;
          byte[] dest = new byte[src.length];
          System.arraycopy(rawValue, 0, dest, 0, dest.length);
          return dest;
        } else {
          return rawValue;
        }
      } else if (rawValue instanceof CachedDeserializable) {
        if (copyOnRead) {
          return ((CachedDeserializable) rawValue).getDeserializedWritableCopy(null, null);
        } else {
          return ((CachedDeserializable) rawValue).getDeserializedForReading();
        }
      } else if (Token.isInvalid(rawValue)) {
        return null;
      } else {
        if (copyOnRead) {
          return CopyHelper.copy(rawValue);
        } else {
          return rawValue;
        }
      }
    }
Return the de-serialized value without changing the stored form in the heap. This causes
local access to create a de-serialized copy (extra work) in favor of keeping values in
serialized form which is important because it makes remote access more efficient. This
assumption is that remote access is much more frequent. TODO Unused, but keeping for
potential performance boost when local Bucket access de-serializes the entry (which could
hurt perf.)

@return the de-serialized value
geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java