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);
    }
}

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • “did not call through to super.onResume”问题解决「建议收藏」

    “did not call through to super.onResume”问题解决「建议收藏」1.错误信息:12-2322:47:26.720:W/dalvikvm(3864):threadid=1:threadexitingwithuncaughtexception(group=0x410af9d8)12-2322:47:26.720:E/AndroidRuntime(3864):FATALEXCEPTION:main12-2322:47:26

    2022年6月2日
    34
  • JAVA小白 编程练习500题 超详细!!!带答案!!!持续更新中~

    JAVA小白 编程练习500题 超详细!!!带答案!!!持续更新中~JAVA小白编程题练习可能有很多刚入门的小白不知道自己如何能快速提升编程技巧与熟练度其实大佬进阶之路只有一个~那就是疯狂码代码!!!实践出真知!!!所以为了大家能够想练习的时候有素材,泡泡给大家整理了一些练习题由于平时比较忙,所以我在不定时努力更新中,欢迎监督~500是立的Flag啊哈哈哈哈,我们共同努力吧,先出个100道,希望能给大家带来帮助~????????????练习题1:接收用户输入的3个整数,并将它们的最大值作为结果输出packagecn.cxy.exec;importj

    2022年4月29日
    58
  • ROC曲线理解

    ROC曲线理解ROC(receiveroperatorcharacteristiccurve,ROC)曲线:即受试者工作特征曲线,是反映敏感度和特异度连续变量的综合指标,用作图法展示两度之间的关系。作图方法:在相关临床研究报告中,若有一个ROC曲线图,将会给人深刻印象,具体做法是:实验结果为计量资料即连续变量,至少计算5个临界点的指标,以敏感度(真阳性率)为Y轴,1-特异度(假阳性率)为X轴,将各点连成…

    2022年5月16日
    86
  • MacPorts_苹果mac教程

    MacPorts_苹果mac教程在macOS上管理软件包,MacPorts和homebrew是不错的选择。但有网友说MacPorts倾向于在自己电脑上编译,而homebrew倾向于使用已经编译好的。这些暂且不论,但有一点,MacPorts是个老牌的工具,它支持的库确实比homebrew多,这让我不得不选择MacPorts.下面简单介绍下MacPortsMacPorts官方文档:https://guide.macpor

    2022年9月21日
    5
  • new URI(zk_servers_1) 路径包含下划线无法获取host的问题

    new URI(zk_servers_1) 路径包含下划线无法获取host的问题

    2021年7月1日
    84
  • 如何用pycharm编写程序_pycharm怎么编写python代码

    如何用pycharm编写程序_pycharm怎么编写python代码一、编写第一个Python项目二、使用Pycharm编写第一个Python程序运行Pycharm,选择CreateNewProject,创建一个新的Python工程。选择’PurePython’创建一个新的纯Python工程项目,Location表示该项目的保存路径,Interpreter用来指定Python计时器的版本。右击项目,选择New,再选择PythonFile在…

    2022年8月25日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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