protostuff基本使用[通俗易懂]

protostuff基本使用[通俗易懂][toc]protostuff基本使用protostuff基于GoogleProtobuf,好处就是不用自己写.proto文件即可实现对象的序列化与反序列化,下面给出示例代码。程序代码User.javapackagecn.xpleaf.pojo;publicclassUser{privateStringname;privateintage;…

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

[toc]


protostuff基本使用

protostuff基于Google Protobuf,好处就是不用自己写.proto文件即可实现对象的序列化与反序列化,下面给出示例代码。

程序代码

User.java

package cn.xpleaf.pojo;

public class User {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + "]";
    }

}

UserSerializationUtil.java

package cn.xpleaf.protostuff;

import com.dyuproject.protostuff.LinkedBuffer;
import com.dyuproject.protostuff.ProtostuffIOUtil;
import com.dyuproject.protostuff.runtime.RuntimeSchema;

import cn.xpleaf.pojo.User;

public class UserSerializationUtil {

    private static RuntimeSchema<User> schema = RuntimeSchema.createFrom(User.class);

    /**
     * 序列化方法,将User对象序列化为字节数组
     * @param user
     * @return
     */
    public static byte[] serialize(User user) {
        // Serializes the {@code message} into a byte array using the given schema
        return ProtostuffIOUtil.toByteArray(user, schema, LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE));
    }

    /**
     * 反序列化方法,将字节数组反序列化为User对象
     * @param array
     * @return
     */
    public static User deserialize(byte[] array) {
        User user = schema.newMessage();
        // Merges the {@code message} with the byte array using the given {@code schema}
        ProtostuffIOUtil.mergeFrom(array, user, schema);
        return user;
    }
}

Demo.java

package cn.xpleaf.protostuff;

import cn.xpleaf.pojo.User;

public class Demo {
    public static void main(String[] args) {
        // 创建User对象
        User user = new User();
        user.setName("xpleaf");
        user.setAge(10);
        System.out.println("序列化前:" + user);
        // 使用UserSerializationUtil将user对象序列化
        byte[] userBytes = UserSerializationUtil.serialize(user);
        // 使用UserSerializationUtil反序列化字节数组为user对象
        User user2 = UserSerializationUtil.deserialize(userBytes);
        System.out.println("序列化后再反序列化:" + user2);
        // 判断值是否相等
        System.out.println(user.toString().equals(user2.toString()));
    }
}

测试

执行demo代码,输出如下:

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

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

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


相关推荐

  • 使用()命令来启用FTP服务_windows播放ftp

    使用()命令来启用FTP服务_windows播放ftp首先是win10控制面板–》程序–》启用或关闭windows功能找到Internetinformationservice(信息服务),并选中“FTP服务”、“FTP扩展性”和“IIS管理控制台”前的复选框,点击“确定”在C盘创建一个FTP共享文件夹,名字自定义接下来是控制面板–》系统和安全–》管理工具–》InternetInformationServices(IIS)管理器如下图所示,鼠标右键红框地方添加FTP站点站点名称自定义,路径选择先前创建的文件夹,

    2025年11月23日
    1
  • 2022年最新一篇文章教你青龙面板拉库,拉取单文件,安装依赖,设置环境变量,解决没有或丢失依赖can‘t find module之保姆教程(附带几十个青龙面板脚本仓库)「建议收藏」

    2022年最新一篇文章教你青龙面板拉库,拉取单文件,安装依赖,设置环境变量,解决没有或丢失依赖can‘t find module之保姆教程(附带几十个青龙面板脚本仓库)「建议收藏」没有安装青龙面板的先看我另外一篇教程https://blog.csdn.net/qq_39997540/article/details/122363463?spm=1001.2014.3001.55011.青龙面板拉库打开浏览器进入按照我的主页里的另一篇教程安装好的青龙面板,点击右上角的添加任务编辑任务10-23/1***点击你添加好的拉库任务右边的运行按钮,过几分钟你要拉的库就下载到你的青龙面板了2.分享收集的青龙面板脚本仓库,建议选择拉一个就可以了1.JB库.

    2022年7月20日
    25
  • 编写java判断闰年_用Java程序判断是否是闰年的简单实例[通俗易懂]

    编写java判断闰年_用Java程序判断是否是闰年的简单实例[通俗易懂]我们知道,(1)如果是整百的年份,能被400整除的,是闰年;(2)如果不是整百的年份,能被4整除的,也是闰年。每400年,有97个闰年。鉴于此,程序可以作以下设计:第一步,判断年份是否被400整除,能的话,就是闰年。比如1600、2000、2400年是闰年。第二步,在第一步不成立的基础上,判断年份能否被100整除,如果是,则不是闰年。比如1900、2100、2200年不是闰年。第三步,在第二步不成…

    2022年7月8日
    20
  • 一篇文章带你深入理解 Java 中的Class.getClassLoader[通俗易懂]

    一篇文章带你深入理解 Java 中的Class.getClassLoader[通俗易懂]文章目录一、ClassLoader的作用二、ClassLoader层次结构三、Class加载时调用类加载器的顺序一、ClassLoader的作用我们都知道java程序写好以后是以.java(文本文件)的文件存在磁盘上,然后,我们通过(bin/javac.exe)编译命令把.java文件编译成.class文件(字节码文件),并存在磁盘上。但是程序要运行,首先一定要把.class文件加载…

    2022年4月29日
    47
  • Zookeeper windows安装

    Zookeeper windows安装百度网盘链接提取码:yg12拷贝zoo.cfg更改日志输出路径新建文件夹启动成功

    2022年8月9日
    6
  • Pytest(17)运行未提交的git(pytest-picked)

    Pytest(17)运行未提交的git(pytest-picked)前言我们每天写完自动化用例后都会提交到git仓库,随着用例的增多,为了保证仓库代码的干净,当有用例新增的时候,我们希望只运行新增的未提交git仓库的用例。pytest-picked插件可以

    2022年7月31日
    5

发表回复

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

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