那些很基础的教程之Protobuf

Posted Java补习课

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了那些很基础的教程之Protobuf相关的知识,希望对你有一定的参考价值。

简介

protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。

Protocol Buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单。

你可以定义数据的结构,然后使用特殊生成的源代码轻松的在各种数据流中使用各种语言进行编写和读取结构数据。你甚至可以更新数据结构,而不破坏由旧数据结构编译的已部署程序。

下载地址

https://github.com/protocolbuffers/protobuf/releases

release 仓库 选择最新的包下载(我不管,我就要最新的)

image.png

安装

cd protobuf-3.17.3
cp -r include/ /usr/local/include/
cp -r bin/ /usr/local/bin/

搞定,如此丝滑~

那些很基础的教程之Protobuf
image.png

使用

UserPB.info

syntax = "proto3";

option java_outer_classname = "UserPB";
option java_package = "com.jiuling.resource.proto";

message info{
string addr = 1; //地址
string group = 2; //分组
}
那些很基础的教程之Protobuf
image.png

ProtoBufTest

 public static void main(String[] args) {

        UserPB.info info = UserPB.info.newBuilder().setAddr("测试").setGroup("group1").build();

        System.out.println(info);
        byte[] data = info.toByteArray();
        try {
            UserPB.info p2 = UserPB.info.parseFrom(data);
            System.out.println(p2);
        } catch (InvalidProtocolBufferException e) {
            e.printStackTrace();
        }
    }

输出结果:

image.png

处理中文异常

 public static void main(String[] args) {

        UserPB.info info = UserPB.info.newBuilder().setAddr("测试").setGroup("group1").build();
        System.out.println(TextFormat.printer().escapingNonAscii(false).printToString(info));

        System.out.println(info.getAddr());
//        System.out.println(info);
        byte[] data = info.toByteArray();
        try {
            UserPB.info p2 = UserPB.info.parseFrom(data);
            System.out.println(TextFormat.printer().escapingNonAscii(false).printToString(p2));
            System.out.println(p2.getAddr());
        } catch (InvalidProtocolBufferException e) {
            e.printStackTrace();
        }
    }
image.png

搞定

主要是记录一些,很基础,但是你就是要去搜,就很烦的基操~


以上是关于那些很基础的教程之Protobuf的主要内容,如果未能解决你的问题,请参考以下文章

提效小技巧——记录那些不常用的代码片段

jstl标签库基础教程及其使用代码

Protobuf 语法 - 史上最简教程

libevent+protobuf轻松搭建tcpserver

RPC 框架之 Goole protobuf

45期盘点那些必问的数据结构算法题之基础排序