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)


相关推荐

  • Docker安装Jenkins教程

    Docker安装Jenkins教程Docker安装Jenkins教程前言一、安装Jenkins1.下载Jenkins2.创建Jenkins挂载目录并授予权限3.启动Jenkins容器4.验证Jenkins容器是否启动二、浏览器访问Jenkins页面1.输入http://192.168.XX.XX:102402.获取管理员密码前言Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。提示:如果没有安装Docker,传送门在这里:链接:

  • YOLOv5训练自己的数据集(超详细完整版)[通俗易懂]

    YOLOv5训练自己的数据集(超详细完整版)[通俗易懂]一.Requirements本教程所用环境:代码版本V3.0,源码下载地址:https://github.com/ultralytics/yolov5.gitPytorch:1.6.0Cuda:10.1Python:3.7官方要求Python>=3.8andPyTorch>=1.6.二.准备自己的数据集(VOC格式)1.在yolov5目录下创建paper_data文件夹(名字可以自定义),目录结构如下,将之前labelImg标注好的xml文件和图片放到对应目录下paper_

  • css半透明层

    css半透明层首次登录弹出提示层,主要有两个层:半透明层,遮住下面的内容;提示层(主要内容),下面为这两个层的css样式。针对IE透明使用的是filter:alpha(opacity=35),针对FF透明的相关代码是opacity:0.35,这样至少在IE和FF下是兼容的,通过测试。.mask{ border:0px; background:#000; width:100%; …

  • TaskScheduler.UnobservedTaskException「建议收藏」

    TaskScheduler.UnobservedTaskException「建议收藏」TaskScheduler.UnobservedTaskException+=(_,ev)=>PrintException(ev.Exception);

  • dao层和service层和control代码(Java简述抽象类和接口的区别)

    DAO层:DAO层叫数据访问层,全称为dataaccessobject,属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,也就是说某个DAO一定是和数据库的某一张表一一对应的,其中封装了增删改查基本操作,建议DAO只做原子操作,增删改查。Service层:Service层叫服务层,被称为服务,粗略的理解就是对一个或多个DAO进行的再次封装,封装成一个服务,所以这里也就不…

  • ubuntu 安装apt_Unable to locate package vim

    ubuntu 安装apt_Unable to locate package vimubuntu通过apt命令快速安装指定版本的nginx先安装nginx依赖的第三方包sudoaptinstallcurlgnupg2ca-certificateslsb-release添加nginx官方的ubuntu的apt源echo”debhttp://nginx.org/packages/ubuntu`lsb_release-cs`nginx”\|sudotee/etc/apt/sources.list.d/nginx.list新增

发表回复

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

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