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; }
相关推荐
总的来说,protostuff序列化包是一个强大的工具,它为Java开发者提供了灵活、高效的数据序列化解决方案,尤其适合那些对性能有高要求或需要跨平台数据交换的项目。通过将源码直接集成到项目,开发者可以更好地控制和...
标题提到的"protostuff序列化工具"是指使用Protostuff库进行数据序列化的工具。 Protostuff的优点在于它不需要预编译的protobuf消息定义,而是通过反射机制动态解析类的字段来实现序列化和反序列化。这使得在项目中...
在使用ProtoBufUtil工具类时,我们可以将对象序列化成字节数组,然后将字节数组反序列化成对象。例如,我们可以使用serializer方法将Student对象序列化成字节数组,然后使用deserializer方法将字节数组反序列化成...
2. 生成序列化代码:使用Protostuff提供的工具或API生成序列化和反序列化的代码。 3. 序列化对象:创建对象实例并调用序列化方法将其转换为字节数组或流。 4. 反序列化数据:接收到字节数组或流后,使用反序列化方法...
- `protostuff-runtime.jar`:运行时库,用于动态编译和处理对象序列化。 - `protostuff-parser.jar`(如果有的话):用于解析protobuf消息描述文件的工具。 - 可能还有其他第三方库,如用于XML或JSON解析的库。 将...
总结来说,JedisSerialization项目旨在提供一个参考,演示如何利用不同的序列化工具,如JDK、XML、JSON和Protostuff,配合Jedis库进行Java对象与Redis之间的数据交换。通过比较和实践这些方法,开发者可以根据项目的...
【标题】"protostuff-runtime-md-1.0.4.zip" 提供的是 Protostuff 运行时库的一个版本,这是一个轻量级且高效的序列化框架,它能够将 Java 对象序列化为二进制格式,同时也支持反序列化。Protostuff 广泛应用于数据...
然后,创建一个`RedisConfig`配置类,以配置RedisTemplate和StringRedisTemplate,并使用protostuff作为序列化工具: ```java @Configuration public class RedisConfig { @Bean public RedisConnectionFactory ...
默认Redis作为缓存,并使用ProtoStuff序列化/反序列化对象 统一的异常处理和优雅的接口输出 RESTful接口风格 可持续集成其他所需的服务 【代码结构】 ─common 公共库 │ ├─data 数据访问处理 │ ├─exception ...
Protostuff是一个轻量级的序列化库,用于将Java对象转换为字节流,便于在网络间传输。相比传统的序列化方式,Protostuff具有速度快、无依赖、支持多种格式(如protobuf、json)等优点,是RPC框架中的理想选择。 ...
序列化是RPC中的关键环节,用于将对象转换为字节流在网络中传输。常见的序列化框架有: 1. **Java序列化**:Java自带的序列化机制,简单但效率较低。 2. **Protobuf**:Google的高效数据序列化协议,支持Varints...
"Protostuff"是一个序列化库,它可以将Java对象转换为二进制格式,便于在网络间传输,或者存储到磁盘。在RPC中,序列化和反序列化是必需的步骤,以便将方法调用和参数转化为可以传输的数据,然后在服务器端还原成可...
`RuntimeSchema` 是 protostuff 库提供的工具,用于根据指定类(如 `Object.class`)创建一个能够序列化和反序列化对象的实例。 四、数据存取操作 1. 存储数据(put) 要将对象存储到 Redis 中,首先需要将对象...
在这个“rpc-demo.zip”压缩包中,我们看到的是一个RPC框架的示例,使用了Maven作为构建工具,Java作为主要编程语言,并结合了Protostuff库进行序列化处理。下面我们将详细探讨这些关键知识点。 1. **RPC框架**:...
阿里巴巴建议使用高效的序列化方法和压缩方法来减少value的大小,例如使用protostuff和kryo序列化方法,使用snappy或gzip压缩工具。 规范四:使用整数对象共享池 阿里巴巴建议使用整数对象共享池来节省内存空间, ...