protostuff 工具类「建议收藏」

protostuff 工具类「建议收藏」protostuff,是google在原来的protobuffer是的优化产品。使用起来也比较简单易用,目前效率也是最好的一种序列化工具。pom:<dependency><groupId>io.protostuff</groupId>…

大家好,又见面了,我是你们的朋友全栈君。

protostuff,是google在原来的protobuffer是的优化产品。使用起来也比较简单易用,目前效率也是最好的一种序列化工具
                pom:
                <dependency>
                  <groupId>io.protostuff</groupId>
                  <artifactId>protostuff-core</artifactId>
                  <version>1.4.0</version>
                </dependency>
                <dependency>
                  <groupId>io.protostuff</groupId>
                  <artifactId>protostuff-runtime</artifactId>
                  <version>1.4.0</version>
                </dependency>

 

package cn.witsky.utils;

import io.protostuff.LinkedBuffer;
import io.protostuff.ProtostuffIOUtil;
import io.protostuff.runtime.RuntimeSchema;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ProtostuffUtils {

    /**
     * 将指定对象序列化为byte数组
     * @param source
     * @param <T>
     * @return
     */
    public static <T> byte[] serialize(T source) {
        LinkedBuffer buffer = null;
        try {
            RuntimeSchema<T> schema = RuntimeSchema.createFrom((Class<T>) source.getClass());
            buffer = LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE);
            return ProtostuffIOUtil.toByteArray(source, schema, buffer);
        } catch (Exception e) {
            throw new RuntimeException("ProtostuffUtils serialize exception");
        } finally {
            if (buffer != null) {
                buffer.clear();
            }
        }
    }

    /**
     * 将byte数组反序列化为指定对象
     * @param source
     * @param typeClass
     * @param <T>
     * @return
     */
    public static <T> T deserialize(byte[] source, Class<T> typeClass) {
        try {
            RuntimeSchema<T> schema = RuntimeSchema.createFrom(typeClass);
            T newInstance = typeClass.newInstance();
            ProtostuffIOUtil.mergeFrom(source, newInstance, schema);
            return newInstance;
        } catch (Exception e) {
            throw new RuntimeException("ProtostuffUtils deserialize exception");
        }
    }

    public static void main(String[] args) throws Exception {
        Test expect = new Test();
        expect.setA("gacl");
        expect.setB("男");
        expect.setC(1);
        byte[] serialized = serialize(expect);
        System.out.println(deserialize(serialized, Test.class));
        System.out.println(deserialize(serialized, Test.class).equals(expect));
//        Assert.assertEquals(deserialize(serialized, String.class), expect);
    }
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/133991.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 一个指针占几个字节?原理是什么呢?

    一个指针占几个字节?原理是什么呢?一个指针占几个字节的问题,感觉会C语言的同学都知道。但是在面试过程中,面了几个同学,不是答忘记了,就是两个、四个的瞎蒙。。。那么,一个指针到底占几个字节呢?其实,这个问题很简单,稍微上网一搜,你就知道:一个指针在64位的计算机上,占8个字节;一个指针在32位的计算机上,占4个字节。这么简单的问题,为什么面试官愿意问呢?其实这个问题不是在考你的记忆能力,是在考察你的计算机基础能力。就比如,…

  • runtime错误解决方案_完美解决Office1402错误

    runtime错误解决方案_完美解决Office1402错误8000401a错误解决方案(OfficeWord,Excel,PowerPoit应用程序无法访问)

  • 利用CSkin组件设计漂亮的WinForm登录界面「建议收藏」

    利用CSkin组件设计漂亮的WinForm登录界面「建议收藏」众所周知,WinForm具有快速开发的优点,但是美观方面一直被人诟病,一般美化都是采用第三方的组件来满足美化效果,这里我也利用Cskin组件来设计一个具有一定美感的登录界面,CSkin下载CSkin的使用你可以自行查看下载后的文档或者另行百度,这里就不介绍了,关于CSkin的美化登录界面简单介绍,主要是利用背景图片结合CSkin界面和控件的效果来实现的,如果你中别人的登录界面,你也可以截取别人的登录界面,然后用自己的控件覆盖人家的登录输入位置,覆盖别人的logo或者系统名称等,这也是一种技巧。

  • 避免硬编码[通俗易懂]

    避免硬编码[通俗易懂]第一种publicinterfaceConstants{/***SparkApplicationConstants*/StringSEPARATOR=””;StringSQLTYPE=”‘通话'”;}第三种importjava.util.Propertiesimport…

    2022年10月19日
  • 查看linux ssh服务信息及运行状态

    查看linux ssh服务信息及运行状态

    2021年10月18日
  • javaScript学习笔记(一)js基础

    javaScript学习笔记(一)js基础=================================公众号关注一波(一叶知秋博客)不定期分享视频资料一、简介1、概述:JavaScript是目前web开发中不可缺少的脚本语言,js不需要编译即可运行,运行在客户端,需要通过浏览器来解析执行JavaScript代码。诞生于1995年,当时的主要目的是验证表单的数据是否合法。Java…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号