`
1028826685
  • 浏览: 938474 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类

Protostuff对象序列化工具

    博客分类:
  • J2EE
 
阅读更多

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序列化包

    总的来说,protostuff序列化包是一个强大的工具,它为Java开发者提供了灵活、高效的数据序列化解决方案,尤其适合那些对性能有高要求或需要跨平台数据交换的项目。通过将源码直接集成到项目,开发者可以更好地控制和...

    protostuff序列化工具

    标题提到的"protostuff序列化工具"是指使用Protostuff库进行数据序列化的工具。 Protostuff的优点在于它不需要预编译的protobuf消息定义,而是通过反射机制动态解析类的字段来实现序列化和反序列化。这使得在项目中...

    Protostuff序列化和反序列化的使用说明

    在使用ProtoBufUtil工具类时,我们可以将对象序列化成字节数组,然后将字节数组反序列化成对象。例如,我们可以使用serializer方法将Student对象序列化成字节数组,然后使用deserializer方法将字节数组反序列化成...

    Protostuff for java and c#

    2. 生成序列化代码:使用Protostuff提供的工具或API生成序列化和反序列化的代码。 3. 序列化对象:创建对象实例并调用序列化方法将其转换为字节数组或流。 4. 反序列化数据:接收到字节数组或流后,使用反序列化方法...

    protostuff-所依赖所有jar包.

    - `protostuff-runtime.jar`:运行时库,用于动态编译和处理对象序列化。 - `protostuff-parser.jar`(如果有的话):用于解析protobuf消息描述文件的工具。 - 可能还有其他第三方库,如用于XML或JSON解析的库。 将...

    JedisSerialization:实现利用Jedis向Redis中写入和得到Java对象的几种序列化工具:JDK、XML、JSON、Protostuff

    总结来说,JedisSerialization项目旨在提供一个参考,演示如何利用不同的序列化工具,如JDK、XML、JSON和Protostuff,配合Jedis库进行Java对象与Redis之间的数据交换。通过比较和实践这些方法,开发者可以根据项目的...

    protostuff-runtime-md-1.0.4.zip

    【标题】"protostuff-runtime-md-1.0.4.zip" 提供的是 Protostuff 运行时库的一个版本,这是一个轻量级且高效的序列化框架,它能够将 Java 对象序列化为二进制格式,同时也支持反序列化。Protostuff 广泛应用于数据...

    spring data redis 封装使用

    然后,创建一个`RedisConfig`配置类,以配置RedisTemplate和StringRedisTemplate,并使用protostuff作为序列化工具: ```java @Configuration public class RedisConfig { @Bean public RedisConnectionFactory ...

    基于SpringBoot+MyBatis+Redis的秒杀系统源码(附项目说明文档).7z

    默认Redis作为缓存,并使用ProtoStuff序列化/反序列化对象 统一的异常处理和优雅的接口输出 RESTful接口风格 可持续集成其他所需的服务 【代码结构】 ─common 公共库 │ ├─data 数据访问处理 │ ├─exception ...

    JAVA实的RPC框架

    Protostuff是一个轻量级的序列化库,用于将Java对象转换为字节流,便于在网络间传输。相比传统的序列化方式,Protostuff具有速度快、无依赖、支持多种格式(如protobuf、json)等优点,是RPC框架中的理想选择。 ...

    RPC那些事儿

    序列化是RPC中的关键环节,用于将对象转换为字节流在网络中传输。常见的序列化框架有: 1. **Java序列化**:Java自带的序列化机制,简单但效率较低。 2. **Protobuf**:Google的高效数据序列化协议,支持Varints...

    基于netty实现的支持长连接的rpc

    "Protostuff"是一个序列化库,它可以将Java对象转换为二进制格式,便于在网络间传输,或者存储到磁盘。在RPC中,序列化和反序列化是必需的步骤,以便将方法调用和参数转化为可以传输的数据,然后在服务器端还原成可...

    redis缓存的简单操作(get、put)

    `RuntimeSchema` 是 protostuff 库提供的工具,用于根据指定类(如 `Object.class`)创建一个能够序列化和反序列化对象的实例。 四、数据存取操作 1. 存储数据(put) 要将对象存储到 Redis 中,首先需要将对象...

    rpc-demo.zip

    在这个“rpc-demo.zip”压缩包中,我们看到的是一个RPC框架的示例,使用了Maven作为构建工具,Java作为主要编程语言,并结合了Protostuff库进行序列化处理。下面我们将详细探讨这些关键知识点。 1. **RPC框架**:...

    阿里巴巴Redis使用规范

    阿里巴巴建议使用高效的序列化方法和压缩方法来减少value的大小,例如使用protostuff和kryo序列化方法,使用snappy或gzip压缩工具。 规范四:使用整数对象共享池 阿里巴巴建议使用整数对象共享池来节省内存空间, ...

Global site tag (gtag.js) - Google Analytics