引入 pom.xml 依赖:
<dependency>
<groupId>com.dyuproject.protostuff</groupId>
<artifactId>protostuff-api</artifactId>
<version>1.0.10</version>
</dependency>
<dependency>
<groupId>com.dyuproject.protostuff</groupId>
<artifactId>protostuff-core</artifactId>
<version>1.0.10</version>
</dependency>
工具类:
/**
* protostuff 序列化、反持久化
*/
public class ProtostuffUtil
{
private static Map<Class<?>, Schema<?>> cachedSchema = new ConcurrentHashMap<Class<?>, Schema<?>>();
private static <T> Schema<T> getSchema(Class<T> clazz)
{
Schema<T> schema = (Schema<T>) cachedSchema.get(clazz);
if (schema == null)
{
schema = RuntimeSchema.getSchema(clazz);
if (schema != null)
{
cachedSchema.put(clazz, schema);
}
}
return schema;
}
/**
* 序列化
*
* @param obj
* @return
*/
public static <T> byte[] serializer(T obj)
{
Class<T> clazz = (Class<T>) obj.getClass();
LinkedBuffer buffer = LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE);
try
{
Schema<T> schema = getSchema(clazz);
return ProtostuffIOUtil.toByteArray(obj, schema, buffer);
}
catch (Exception e)
{
throw new IllegalStateException(e.getMessage(), e);
}
finally
{
buffer.clear();
}
}
/**
* 反序列化
*
* @param data
* @param clazz
* @return
*/
public static <T> T deserializer(byte[] data, Class<T> clazz)
{
try
{
T obj = clazz.newInstance();
Schema<T> schema = getSchema(clazz);
ProtostuffIOUtil.mergeFrom(data, obj, schema);
return obj;
}
catch (Exception e)
{
throw new IllegalStateException(e.getMessage(), e);
}
}
}
测试用例:
public static void main(String[] args)
{
String s = "is a good day!";
byte[] bytes = ProtostuffUtil.serializer(s);
System.out.println(Arrays.toString(bytes));
String ss = ProtostuffUtil.deserializer(bytes, String.class);
System.out.println(ss);
}