code: public static <T> T fromByteArray(byte[] data, Class<T> clazz, ClassLoader classLoader) {
          if (data == null) {
              return null;
          }
          if (ReflectionUtils.hasInterface(clazz, ISerializationSupport.class)) {
              ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
              if (classLoader != null) {
                  Thread.currentThread().setContextClassLoader(classLoader);
              }
              try {
                  Constructor<T> constructor = clazz.getDeclaredConstructor();
                  constructor.setAccessible(true);
                  T obj = constructor.newInstance();
                  ((ISerializationSupport) obj).fromBytes(data);
                  return obj;
              } catch (InstantiationException | IllegalAccessException | NoSuchMethodException
                      | SecurityException | IllegalArgumentException | InvocationTargetException e) {
                  throw new DeserializationException(e);
              } finally {
                  Thread.currentThread().setContextClassLoader(oldClassLoader);
              }
          }
          return SerializationUtils.fromByteArrayFst(data, clazz, classLoader);
      }
docs: Deserialize a byte array back to an object, with custom class loader.
  
  <p>
  If the target class implements {@link ISerializationSupport}, this method
  calls its {@link ISerializationSupport#toBytes()} method; otherwise FST
  library is used to serialize the object.
  </p>
  
  @param data
  @param clazz
  @param classLoader
  @return
  @deprecated since 0.9.2 with no replacement, use
  {@link #fromByteArrayFst(byte[], Class, ClassLoader)} or
  {@link #fromByteArrayKryo(byte[], Class, ClassLoader)}