通过protostuff实现动态proto
2015-06-12 11:49
507 查看
dependencies--项目依赖
Student--实体类
util类
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>2.6.1</version> <type>jar</type> </dependency> <dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-core</artifactId> <version>1.0.9</version> </dependency> <dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-api</artifactId> <version>1.0.9</version> </dependency> <dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-runtime</artifactId> <version>1.0.9</version> </dependency> <dependency> <groupId>org.objenesis</groupId> <artifactId>objenesis</artifactId> <version>2.1</version> </dependency> </dependencies>
Student--实体类
public class Student { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return String.format("UserName:%s--UserAge:%d", name,age); } }
util类
import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.objenesis.Objenesis; import org.objenesis.ObjenesisStd; import com.dyuproject.protostuff.LinkedBuffer; import com.dyuproject.protostuff.ProtostuffIOUtil; import com.dyuproject.protostuff.Schema; import com.dyuproject.protostuff.runtime.RuntimeSchema; public class SerializationUtil { private SerializationUtil(){} private static Map<Class<?>, Schema<?>> cachedSchema = new ConcurrentHashMap<Class<?>, Schema<?>>(); private static Objenesis objenesis = new ObjenesisStd(true); private static <T> Schema<T> getSchema(Class<T> cls){ @SuppressWarnings("unchecked") Schema<T> schema = (Schema<T>)cachedSchema.get(cls); if(schema==null){ schema = RuntimeSchema.getSchema(cls); cachedSchema.put(cls, schema); } return schema; } public static <T> byte[] serialize(T obj){ @SuppressWarnings("unchecked") Class<T> cls = (Class<T>)obj.getClass(); LinkedBuffer buffer = LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE); try { Schema<T> schema = getSchema(cls); return ProtostuffIOUtil.toByteArray(obj, schema, buffer); } catch (Exception e) { throw new IllegalStateException(e.getMessage(), e); } finally{ buffer.clear(); } } public static <T> T deserialize(byte[] data , Class<T> cls){ try { T message = objenesis.newInstance(cls); Schema<T> schema = getSchema(cls); ProtostuffIOUtil.mergeFrom(data, message, schema); return message; } catch (Exception e) { throw new IllegalStateException(e.getMessage(), e); } } }
相关文章推荐
- StringUtils工具类的使用
- Construct Binary Tree from Preorder and Inorder Traversal
- 计算机视觉学习资源
- property_get/property_set
- leetcode Merge Two Sorted Lists
- JEE一些常用错误收集
- laravel5学习笔记(3)——复杂的路由
- 解决maven的“Dynamic Web Module 3.0 requires Java 1.6 or newer.”错误
- Redis IRedisTypedClient
- linux命令1——chown命令
- django自定义过滤器函数
- Construct Binary Tree from Inorder and Postorder Traversal
- 单元模型对象必须保护共享数据
- Android 高仿 频道管理----网易、今日头条、腾讯视频 (可以拖动的GridView)附源码DEMO
- android编译系统的makefile文件Android.mk写法
- Android组建1:Intent的使用
- 【转】mapgis的一些实用方法和处理技巧
- HTML中的div标签
- 9-1图案和图案画笔的定义
- super