VO.java
import java.io.Serializable; /** * [概 要] java对象序列化工具<br/> * [环 境] J2SE 1.7 * @author 研发部-ly * @version 1.0 */ public class VO<T> implements Serializable { private T value; public VO(T value) { this.value = value; } public VO() { } public T getValue() { return value; } @Override public String toString() { return "VO{" + "value=" + value + '}'; } }
ProtostuffSerializer.java
import java.util.concurrent.ConcurrentHashMap; import com.dyuproject.protostuff.LinkedBuffer; import com.dyuproject.protostuff.ProtostuffIOUtil; import com.dyuproject.protostuff.Schema; import com.dyuproject.protostuff.runtime.RuntimeSchema; /** * [概 要] protostuff对象序列化工具<br/> * [环 境] J2SE 1.7 * @author 研发部-ly * @version 1.0 */ public class ProtostuffSerializer { private static ConcurrentHashMap<Class<?>, Schema<?>> cachedSchema = new ConcurrentHashMap<Class<?>, Schema<?>>(); public <T> byte[] serialize(final T source) { VO<T> vo = new VO<T>(source); final LinkedBuffer buffer = LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE); try { final Schema<VO> schema = getSchema(VO.class); return serializeInternal(vo, schema, buffer); } catch (final Exception e) { throw new IllegalStateException(e.getMessage(), e); } finally { buffer.clear(); } } public <T> T deserialize(final byte[] bytes) { try { Schema<VO> schema = getSchema(VO.class); VO vo = deserializeInternal(bytes, schema.newMessage(), schema); if (vo != null && vo.getValue() != null) { return (T) vo.getValue(); } } catch (final Exception e) { throw new IllegalStateException(e.getMessage(), e); } return null; } private <T> byte[] serializeInternal(final T source, final Schema<T> schema, final LinkedBuffer buffer) { return ProtostuffIOUtil.toByteArray(source, schema, buffer); } private <T> T deserializeInternal(final byte[] bytes, final T result, final Schema<T> schema) { ProtostuffIOUtil.mergeFrom(bytes, result, schema); return result; } private static <T> Schema<T> getSchema(Class<T> clazz) { @SuppressWarnings("unchecked") Schema<T> schema = (Schema<T>) cachedSchema.get(clazz); if (schema == null) { schema = RuntimeSchema.createFrom(clazz); cachedSchema.put(clazz, schema); } return schema; } }
测试:
/** * * [概 要] 序列化对象 * * @param object 要序列化的对象 * @return byte[] 对象序列化后的字节信息 */ private byte[] serialize(Object object) { ProtostuffSerializer protostuffSerializer = new ProtostuffSerializer(); byte[] result=protostuffSerializer.serialize(object); return result; } /** * * [概 要] 反序列化 * @param bytes 对象的字节信息 * @return Object 反序列化的对象 */ public static Object unserialize(byte[] bytes) { ProtostuffSerializer protostuffSerializer = new ProtostuffSerializer(); Object object=protostuffSerializer.deserialize(bytes); return object; }