package org.hibernate.examples.utils;
/**
* org.hibernate.examples.utils.Serializers
*
* @author 배성혁 sunghyouk.bae@gmail.com
* @since 2013. 11. 28. 오후 5:33
*/
public final class Serializers {
private Serializers() {
}
private static final BinarySerializer serializer = new BinarySerializer();
/**
* 객체를 바이너리 직렬화를 수행합니다.
*
* @param graph 직렬화할 객체
* @return 직렬화 결과를 담은 바이트 배열
*/
public static byte[] serializeObject(Object graph) {
return serializer.serialize(graph);
}
/**
* 직렬화 정보를 담은 바이트 배열을 역직렬화하여 객체를 빌드합니다.
*
* @param clazz Type of deserialized object
* @param <T> Type of deseiralized object
* @return deserialized object
*/
public static <T> T deserializeObject(byte[] bytes, Class<T> clazz) {
return serializer.deserialize(bytes, clazz);
}
/**
* Binary serializer 를 이용하여 객체를 복사한다.
*
* @param graph cobject to copied
* @param <T> generic type
* @return cpoied object
*/
@SuppressWarnings("unchecked")
public static <T> T copyObject(T graph) {
return copyObject(graph, (Class<T>) graph.getClass());
}
/**
* Binary serializer를 이용하여 객체를 복사한다.
*
* @param graph object to copied
* @param clazz Class of copied object
* @param <T> Generic type
* @return copied object
*/
public static <T> T copyObject(T graph, Class<T> clazz) {
return (graph == null) ? null : deserializeObject(serializeObject(graph), clazz);
}
}