package serializers.jackson;
import java.io.*;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
import com.fasterxml.jackson.databind.ObjectWriter;
public final class StdJacksonDataBind<T> extends BaseJacksonDataBind<T>
{
public StdJacksonDataBind(String name, Class<T> clazz, ObjectMapper mapper) {
super(name, clazz, mapper);
}
public StdJacksonDataBind(String name, JavaType type,
ObjectMapper mapper, ObjectReader reader, ObjectWriter writer)
{
super(name, type, mapper, reader, writer);
}
@Override
public byte[] serialize(T data) throws IOException
{
return writer.writeValueAsBytes(data);
}
@Override
@SuppressWarnings("unchecked")
public T deserialize(byte[] array) throws IOException
{
return (T) reader.readValue(array, 0, array.length);
}
// // Future extensions for testing performance for item sequences
@Override
public void serializeItems(T[] items, OutputStream out) throws IOException
{
JsonGenerator generator = constructGenerator(out);
// JSON allows simple sequences, so:
for (int i = 0, len = items.length; i < len; ++i) {
writer.writeValue(generator, items[i]);
}
generator.close();
}
@Override
@SuppressWarnings("unchecked")
public T[] deserializeItems(InputStream in, int numberOfItems) throws IOException
{
T[] result = (T[]) new Object[numberOfItems];
JsonParser parser = constructParser(in);
for (int i = 0; i < numberOfItems; ++i) {
result[i] = (T) reader.readValue(parser, type);
}
parser.close();
return result;
}
}