protobuf3.5.1使用的简单例子
前言
1. 什么是protobuf
Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,是一种轻便高效的结构化数据存储格式,平台无关、语言无关、可扩展,可用于通讯协议和数据存储等领域。
2.
- 平台无关,语言无关,可扩展;
- 提供了友好的动态库,使用简单;
- 解析速度快,比对应的XML快约20-100倍;
- 序列化数据非常简洁、紧凑,与XML相比,其序列化之后的数据量约为1/3到1/10。
安装
MAC/OS 安装
1. 下载
https://github.com/google/protobuf/releases下载protobuf-all-3.5.1.tar.gz
2. 解压 tar xvf protobuf-all-3.5.1.tar.gz
3. 编译并安装
- cd protobuf.3.5.1
- ./configure
- make
- make check
- make install
4. 验证
- protoc --version
一个简单的例子
1. 创建 .proto 文件
- syntax = "proto3";
- package tutorial;
- option java_package = "com.example.tutorial";
- option java_outer_classname = "AddressBookProtos";
- message Person {
- string name = 1;
- int32 id = 2;
- string email = 3;
- }
- message AddressBook {
- repeated Person people = 1;
- int32 id = 2;
- }
2. 编译
- protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/addressbook.proto
使用上面的命令格式生成编译很好的Java class文件
3. 创建Maven项目,添加pom依赖
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>protobuftest</groupId>
- <artifactId>protobuftest</artifactId>
- <version>1.0-SNAPSHOT</version>
- <dependencies>
- <dependency>
- <groupId>com.google.protobuf</groupId>
- <artifactId>protobuf-java</artifactId>
- <version>3.5.1</version>
- </dependency>
- </dependencies>
- </project>
项目的结构如上图所示。
4. 新建一个Test类来进行测试
- package com.example.tutorial;
- import java.io.IOException;
- public class Test {
- public static void main(String[] args) throws IOException {
- AddressBookProtos.Person.Builder pbulider = AddressBookProtos.Person.newBuilder();
- pbulider.setId(1);
- pbulider.setName("jinhong");
- pbulider.setEmail("1060951934@qq.com");
- AddressBookProtos.Person person = pbulider.build();
- AddressBookProtos.AddressBook.Builder builder = AddressBookProtos.AddressBook.newBuilder();
- builder.addPeople(person);
- builder.setId(1);
- AddressBookProtos.AddressBook addressBook = builder.build();
- System.out.println("before :" + addressBook.toString());
- System.out.println("addressBook byte");
- for (byte b : addressBook.toByteArray()) {
- System.out.println(b);
- }
- System.out.println(addressBook.toByteString());
- byte[] byteArray = addressBook.toByteArray();
- AddressBookProtos.AddressBook person2 = AddressBookProtos.AddressBook.parseFrom(byteArray);
- System.out.println("after: " + person2.toString());
- }
- }
测试的结果如下:
通过上面的测试,我们简单了解了protobuf的使用。后续将继续深入了解protobuf的一些细节。
在学习的时候建议多了解下IDL(interface discription language)的概念,它是跨语言和平台的关键。
protobuf3.5.1使用的简单例子的更多相关文章
- Hibernate4.2.4入门(一)——环境搭建和简单例子
一.前言 发下牢骚,这段时间要做项目,又要学框架,搞得都没时间写笔记,但是觉得这知识学过还是要记录下.进入主题了 1.1.Hibernate简介 什么是Hibernate?Hibernate有什么用? ...
- AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答
一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...
- spring mvc(注解)上传文件的简单例子
spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方1.form的enctype=”multipart/form-data” 这个是上传文件必须的2.applicationConte ...
- ko 简单例子
Knockout是在下面三个核心功能是建立起来的: 监控属性(Observables)和依赖跟踪(Dependency tracking) 声明式绑定(Declarative bindings) 模板 ...
- mysql定时任务简单例子
mysql定时任务简单例子 ? 1 2 3 4 5 6 7 8 9 如果要每30秒执行以下语句: [sql] update userinfo set endtime = now() WHE ...
- java socket编程开发简单例子 与 nio非阻塞通道
基本socket编程 1.以下只是简单例子,没有用多线程处理,只能一发一收(由于scan.nextLine()线程会进入等待状态),使用时可以根据具体项目功能进行优化处理 2.以下代码使用了1.8新特 ...
- 一个简单例子:贫血模型or领域模型
转:一个简单例子:贫血模型or领域模型 贫血模型 我们首先用贫血模型来实现.所谓贫血模型就是模型对象之间存在完整的关联(可能存在多余的关联),但是对象除了get和set方外外几乎就没有其它的方法,整个 ...
- [转] 3个学习Socket编程的简单例子:TCP Server/Client, Select
以前都是采用ACE的编写网络应用,最近由于工作需要,需要直接只用socket接口编写CS的代码,重新学习这方面的知识,给出自己所用到的3个简单例子,都是拷贝别人的程序.如果你能完全理解这3个例子,估计 ...
- jsonp的简单例子
jsonp的简单例子 index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q ...
随机推荐
- SpringBoot——定时任务+WebSocket(问题)
开发环境:win7 + idea2018 + jdk 1.8 + springboot 2.x 记一次出现问题,我在项目中先集成了websocket环境,并且测试通过,之后想要模拟实时推送的效果,虽然 ...
- Python入门之面向对象的多态
本章目录: 一.多态 二.多态性 三.鸭子类型 ============================== 一.多态 多态指的是一类事物有多种形态. 动物有多种形态:人,狗,猪. import ab ...
- 03: Django Model数据库操作
目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...
- 20145330 《网络对抗》PC平台逆向破解:注入shellcode 和 Return-to-libc 攻击实验
20145330 <网络对抗>PC平台逆向破解:注入shellcode 实验步骤 1.用于获取shellcode的C语言代码 2.设置环境 Bof攻击防御技术 需要手动设置环境使注入的sh ...
- 20165310 java_blog_week3
2165310 <Java程序设计>第3周学习总结 教材学习内容总结 类 声明与命名规则 驼峰原则 变量:体现属性 方法:体现行为/功能 变量: 成员变量与局部变量: 成员变量:有效范围: ...
- VC++ 文件和应用程序关联,默认图标不显示问题
- c/c++ 动态申请数组(转载)
转载:http://blog.csdn.net/hondely/article/details/6779887 转载:http://bbs.csdn.net/topics/390721031 转载:h ...
- JS 获取浏览器的宽和高
网页可见区域宽:document.body.clientWidth 网页可见区域高:document.body.clientHeight 网页可见区域宽:document.body.offsetWid ...
- babun安装,整合到cmder
babun Babun的特性: 预装了Cygwin以及许多的插件 默认的命令行安装工具,没有管理员权限要求. 预装了 pact工具,一个高级的包管理器,类似 apt-get或yum xTerm-256 ...
- hdu 6180 Schedule
Schedule Problem Description There are N schedules, the i-th schedule has start time si and end time ...