Protostuff序列化工具类

简介: 源代码 package org.wit.ff.util; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.

源代码

package org.wit.ff.util;

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; /**  *   * <pre>  * 序列号工具  * </pre>  *  * @author F.Fang  */ public class ProtoStuffSerializerUtil {  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;  }  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;  }   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;  }   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; } }

测试代码

public class ProtoStuffSerializerUtilTest { public static class Person{ int id; String name; public Person(){ } public Person(int id, String name){ this.id = id; this.name = name; } public int getId() { return id; } public String getName() { return name; } } @Test public void demo(){ Person p = new Person(1,"ff"); byte[] arr = ProtoStuffSerializerUtil.serialize(p); Person result = ProtoStuffSerializerUtil.deserialize(arr, Person.class); assertEquals(p.getId(), result.getId()); assertEquals(p.getName(), result.getName()); } }
一段旅程,远去所有昨天的昨天,如记事本翻开新的一页,永远的不漏痕迹的把记忆藏在一片洁白中。然后绚烂的开始新的故事。
相关文章
|
消息中间件 NoSQL 安全
【Spring技术原理】采用protostuff和kryo高性能序列化框架实现RestTemplate的序列化组件
【Spring技术原理】采用protostuff和kryo高性能序列化框架实现RestTemplate的序列化组件
292 0
【Spring技术原理】采用protostuff和kryo高性能序列化框架实现RestTemplate的序列化组件
|
Dubbo 算法 安全
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(二)
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(二)
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(二)
|
SQL 存储 Java
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(一)
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(一)
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(一)
|
缓存 Java Maven
java序列化机制之protoStuff
之前曾经写了两篇java的序列的机制,一种是默认的java序列化机制,这种方式效率太低。另外一种是谷歌的protobuf,但是这种我们还要写proto文件,并且我们还要使用工具来编译生成java文件,实在太麻烦。但是protostuff却不一样,能够很好的解决上面两者的问题。这篇文章就研究一下如何去使用,并对其进行一个简单的分析。
515 0
|
XML JSON 缓存
Java - Protostuff 序列化和反序列化
Java - Protostuff 序列化和反序列化
258 0
Protostuff 的Java序列化和反序列化
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/80589509 io.
1374 0
|
1月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
1月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
2月前
|
存储 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第9天】在Java的世界里,对象序列化是连接数据持久化与网络通信的桥梁。本文将深入探讨Java对象序列化的机制、实践方法及反序列化过程,通过代码示例揭示其背后的原理。从基础概念到高级应用,我们将一步步揭开序列化技术的神秘面纱,让读者能够掌握这一强大工具,以应对数据存储和传输的挑战。