org.linkedin.util-core/src/main/java/org/linkedin/util/io/IOUtils.java
@SuppressWarnings("unchecked")
  public static <T extends Serializable> T deserialize(byte[] array, boolean useContextClassLoader)
    throws IOException, ClassNotFoundException
  {
    ByteArrayInputStream bais = new ByteArrayInputStream(array);
    ObjectInputStream ois;

    if (useContextClassLoader)
    {
      ois = new ObjectInputStreamWithClassLoader(bais, null);
    }
    else
    {
      ois = new ObjectInputStream(bais);
    }

    try
    {
      return (T) ois.readObject();
    }
    finally
    {
      ois.close();
    }
  }
@SuppressWarnings("unchecked")
  public static <T extends Serializable> T deserialize(byte[] array, boolean useContextClassLoader)
    throws IOException, ClassNotFoundException
  {
    ByteArrayInputStream bais = new ByteArrayInputStream(array);
    ObjectInputStream ois;

    if (useContextClassLoader)
    {
      ois = new ObjectInputStreamWithClassLoader(bais, null);
    }
    else
    {
      ois = new ObjectInputStream(bais);
    }

    try
    {
      return (T) ois.readObject();
    }
    finally
    {
      ois.close();
    }
  }
This is the opposite of {@link #serialize(Serializable)}.

@param array the previously serialized object
@param useContextClassLoader true to use the context classLoader, false
to use the current classLoader
@exception IOException if there is a problem in the deserialization step
@exception ClassNotFoundException if problem with the serialized object