docs: @SuppressWarnings("unchecked")
  	public static <T> T cloneByStream(T obj) {
  		if (null == obj || false == (obj instanceof Serializable)) {
  			return null;
  		}
  		final FastByteArrayOutputStream byteOut = new FastByteArrayOutputStream();
  		ObjectOutputStream out = null;
  		try {
  			out = new ObjectOutputStream(byteOut);
  			out.writeObject(obj);
  			out.flush();
  			final ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(byteOut.toByteArray()));
  			return (T) in.readObject();
  		} catch (Exception e) {
  			throw new UtilException(e);
  		} finally {
  			IoUtil.close(out);
  		}
  	}