public Object getValue(boolean preferCD) throws RemoteOperationException {
      final GetReplyMessage reply = getReply;
      try {
        if (reply != null) {
          if (reply.valueIsByteArray) {
            return reply.valueInBytes;
          } else if (preferCD) {
            return CachedDeserializableFactory.create(reply.valueInBytes,
                getDistributionManager().getCache());
          } else {
            return BlobHelper.deserializeBlob(reply.valueInBytes, reply.remoteVersion, null);
          }
        }
        return null;
      } catch (IOException e) {
        throw new RemoteOperationException(
            "Unable to deserialize value (IOException)",
            e);
      } catch (ClassNotFoundException e) {
        throw new RemoteOperationException(
            "Unable to deserialize value (ClassNotFoundException)",
            e);
      }
    }
De-seralize the value, if the value isn't already a byte array, this method should be called
in the context of the requesting thread for the best scalability

@see EntryEventImpl#deserialize(byte[])
@return the value object
geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteGetMessage.java