package serializers;
import java.io.*;
import java.lang.reflect.Array;
import data.media.MediaContent;
import com.caucho.hessian.io.*;
public class Hessian
{
public static void register(TestGroups groups)
{
groups.media.add(JavaBuiltIn.mediaTransformer, new HessianSerializer<MediaContent>(MediaContent.class),
new SerFeatures(
SerFormat.BIN_CROSSLANG,
SerGraph.FULL_GRAPH,
SerClass.ZERO_KNOWLEDGE,""
)
);
}
// ------------------------------------------------------------
// Serializer (just one)
public final static class HessianSerializer<T> extends Serializer<T>
{
private final Class<T> clz;
public HessianSerializer(Class<T> c) { clz = c; }
public String getName() { return "hessian"; }
@SuppressWarnings("unchecked")
public T deserialize(byte[] array) throws Exception
{
ByteArrayInputStream in = new ByteArrayInputStream(array);
Hessian2StreamingInput hin = new Hessian2StreamingInput(in);
return (T) hin.readObject();
}
public byte[] serialize(T data) throws java.io.IOException
{
ByteArrayOutputStream out = outputStream(data);
Hessian2StreamingOutput hout = new Hessian2StreamingOutput(out);
hout.writeObject(data);
return out.toByteArray();
}
@Override
public final void serializeItems(T[] items, OutputStream out) throws Exception
{
Hessian2StreamingOutput hout = new Hessian2StreamingOutput(out);
for (Object item : items) {
hout.writeObject(item);
}
hout.flush();
hout.close();
}
@SuppressWarnings("unchecked")
@Override
public T[] deserializeItems(InputStream in, int numberOfItems) throws Exception
{
Hessian2StreamingInput hin = new Hessian2StreamingInput(in);
T[] result = (T[]) Array.newInstance(clz, numberOfItems);
for (int i = 0; i < numberOfItems; ++i) {
result[i] = (T) hin.readObject();
}
hin.close();
return result;
}
}
}