import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.List; import com.dyuproject.protostuff.LinkedBuffer; import com.dyuproject.protostuff.ProtostuffIOUtil; import com.dyuproject.protostuff.Schema; import com.dyuproject.protostuff.runtime.RuntimeSchema; /** * 序列话工具 */ public class ProtoStuffSerializerUtil { /** * 序列化对象 * @param obj * @return */ public static <T> byte[] serialize(T obj) { if (obj == null) { throw new RuntimeException("序列化对象(" + obj + ")!"); } @SuppressWarnings("unchecked") Schema<T> schema = (Schema<T>) RuntimeSchema.getSchema(obj.getClass()); LinkedBuffer buffer = LinkedBuffer.allocate(1024 * 1024); byte[] protostuff = null; try { protostuff = ProtostuffIOUtil.toByteArray(obj, schema, buffer); } catch (Exception e) { throw new RuntimeException("序列化(" + obj.getClass() + ")对象(" + obj + ")发生异常!", e); } finally { buffer.clear(); } return protostuff; } /** * 反序列化对象 * @param paramArrayOfByte * @param targetClass * @return */ public static <T> T deserialize(byte[] paramArrayOfByte, Class<T> targetClass) { if (paramArrayOfByte == null || paramArrayOfByte.length == 0) { throw new RuntimeException("反序列化对象发生异常,byte序列为空!"); } T instance = null; try { instance = targetClass.newInstance(); } catch (InstantiationException | IllegalAccessException e) { throw new RuntimeException("反序列化过程中依据类型创建对象失败!", e); } Schema<T> schema = RuntimeSchema.getSchema(targetClass); ProtostuffIOUtil.mergeFrom(paramArrayOfByte, instance, schema); return instance; } /** * 序列化列表 * @param objList * @return */ public static <T> byte[] serializeList(List<T> objList) { if (objList == null || objList.isEmpty()) { throw new RuntimeException("序列化对象列表(" + objList + ")参数异常!"); } @SuppressWarnings("unchecked") Schema<T> schema = (Schema<T>) RuntimeSchema.getSchema(objList.get(0).getClass()); LinkedBuffer buffer = LinkedBuffer.allocate(1024 * 1024); byte[] protostuff = null; ByteArrayOutputStream bos = null; try { bos = new ByteArrayOutputStream(); ProtostuffIOUtil.writeListTo(bos, objList, schema, buffer); protostuff = bos.toByteArray(); } catch (Exception e) { throw new RuntimeException("序列化对象列表(" + objList + ")发生异常!", e); } finally { buffer.clear(); try { if (bos != null) { bos.close(); } } catch (IOException e) { e.printStackTrace(); } } return protostuff; } /** * 反序列化列表 * @param paramArrayOfByte * @param targetClass * @return */ public static <T> List<T> deserializeList(byte[] paramArrayOfByte, Class<T> targetClass) { if (paramArrayOfByte == null || paramArrayOfByte.length == 0) { throw new RuntimeException("反序列化对象发生异常,byte序列为空!"); } Schema<T> schema = RuntimeSchema.getSchema(targetClass); List<T> result = null; try { result = ProtostuffIOUtil.parseListFrom(new ByteArrayInputStream(paramArrayOfByte), schema); } catch (IOException e) { throw new RuntimeException("反序列化对象列表发生异常!", e); } return result; } }
相关推荐
提供prostuff序列化源码,直接将需要的源码拷进项目即可。
包括了序列化和反序列化功能,将对应包拷入工程即可使用
支持jdk1.6以上版本,protostuff源码,拷入项目即可使用
今天小编就为大家分享一篇关于Protostuff序列化和反序列化的使用说明,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
序列化的例子序列化的例子序列化的例子序列化的例子序列化的例子序列化的例子序列化的例子序列化的例子序列化的例子序列化的例子序列化的例子序列化的例子序列化的例子
XML序列化例子
这是Java 序列化(Serializable)实现的一个例子,例子是显示文件的读写的。
一个基于java jaxb的序列化例子,非常简单易懂。jaxb是java标准的序列化方案,实现方式简单,是一种很好用的java xml 序列化反序列化方式
C++ JSON 序列化与反序列化 相关的博客文章见:http://blog.csdn.net/TragicGuy
序列化与反序列化经典例子
什么叫序列化? 我们都知道对象是暂时保存在内存中的,不能用U盘考走了,有时为了使用介质转移对象,并且把对象的状态保持下来,就需要把对象保存下来,这个过程就叫做序列化,通俗点,就是把人的魂(对象)收伏成一...
Google Protobuf基于Qt开发序列化与反序列化用QUdpSocket传输并显示。实例。 具体可查看了解:https://blog.csdn.net/automoblie0/article/details/101363526
自己写的一个序列化和反序列化的例子 每段代码都有详细注解
这是一个序列化和反序列化的一个简单的java语言的例子。
在保存个人简例等操作中,常需要把相关数据以对象的形式序列化,需要的时候再反序列化,这个例子展示了相关操作
序列化和反序列化的封装类,只要调用就行 序列化和反序列化的封装类 序列化和反序列化的封装类 序列化和反序列化的封装类 序列化和反序列化的封装类
java 对象的序列化与反序列化 java 对象的序列化与反序列化
此例子先用VS生成基于PLCOpen的XSD生成对应的类,然后利用序列化和反序列化的方式写入读取XML文件
android通过webservice访问服务器,使对象序列化。
1.对象序列化的介绍 (1).NET支持对象序列化的几种方式 二进制序列化:对象序列化之后是二进制形式的,通过BinaryFormatter类来实现的,这个类位于System.Runtime.Serialization.Formatters.Binary命名空间下。 SOAP...