1. 程式人生 > >protobuf入門教程(一):簡介和安裝

protobuf入門教程(一):簡介和安裝

1.1 簡介

1.1.1 什麼是protobuf

protobuf也叫protocol buffer是google 的一種資料交換的格式,它獨立於語言,獨立於平臺。google 提供了多種語言的實現:Java、c#、c++、Go 和 Python,每一種實現都包含了相應語言的編譯器以及庫檔案。

由於它是一種二進位制的格式,比使用 xml 、json進行資料交換快許多。可以把它用於分散式應用之間的資料通訊或者異構環境下的資料交換。作為一種效率和相容性都很優秀的二進位制資料傳輸格式,可以用於諸如網路傳輸、配置檔案、資料儲存等諸多領域。

1.1.2 protobuf的優缺點

1.1.2.1 優點

  • 效能好/效率高
  • 程式碼生成機制
  • 支援“向後相容”和“向前相容”
  • 支援多種程式語言

1.1.2.1 缺點

  • 應用不夠廣(相比xml和json)
  • 二進位制格式導致可讀性差
  • 缺乏自描述

1.2 安裝

1.2.1 Ubuntu環境搭建

原始碼包中的src/README.md, 有詳細的安裝說明,安裝過程如下: 
1、解壓壓縮包:unzip protobuf-master.zip

2、進入解壓後的資料夾:cd protobuf-master

3、安裝所需工具:sudo apt-get install autoconf automake libtool curl make g++ unzip

4、自動生成configure配置檔案:./autogen.sh

5、配置環境:./configure

6、編譯原始碼(時間比較長):make

7、安裝:sudo make install

8、重新整理動態庫:sudo ldconfig

1.2.2 環境測試

1.2.2.1 examples例子

在原始碼包中,有個examples資料夾,把裡面的addressbook.proto、add_person.cc、list_people.cc拷貝出來: 
這裡寫圖片描述

1.2.2.2 編譯 .proto檔案

這裡寫圖片描述

  • protoc:protobuf自帶的編譯工具,將.proto檔案生成指定的類
  • –cpp_out:指定輸出特定的語言和路徑

通過protoc工具編譯.proto檔案時,編譯器將生成所選擇語言的程式碼,這些程式碼可以操作在.proto檔案中定義的訊息型別,包括獲取、設定欄位值,將訊息序列化到一個輸出流中,以及從一個輸入流中解析訊息。

對C++來說,編譯器會為每個.proto檔案生成一個.h檔案和一個.cc檔案,.proto檔案中的每一個訊息有一個對應的類。

1.2.2.3 編譯執行測試案例

1) 寫檔案(序列化)

編譯程式碼: 
這裡寫圖片描述

  • 反引號(` 數字1前面的符號):反引號的作用就是將反引號內的linux命令執行
  • pkg-config 是通過庫提供的一個.pc檔案獲得庫的各種必要資訊的,包括版本資訊、編譯和連線需要的引數等。
  • pkg-config –cflags protobuf:列出指定共享庫的預處理和編譯flags

這裡寫圖片描述

執行可執行程式: 
這裡寫圖片描述

pb.xxx檔案內容如下: 
這裡寫圖片描述

2) 讀檔案(反序列化)

這裡寫圖片描述

相關推薦

protobuf入門教程()簡介安裝

1.1 簡介 1.1.1 什麼是protobuf protobuf也叫protocol buffer是google 的一種資料交換的格式,它獨立於語言,獨立於平臺。google 提供了多種語言的實現:Java、c#、c++、Go 和 Python,每一種實現都包含了相

drbd()簡介安裝

分區創建 主從 簡單 scheduler 完成 exp com 解析 etc 本文目錄:1.drbd簡介2.drbd工作原理和術語說明 2.1 drbd工作原理 2.2 drbd復制協議模型 2.3 drbd設備的概念 2.4 drbd資源角色 2.5 drbd工作模式 2

RabbitMQ入門教程(二)簡介基本概念

一:簡介 RabbitMQ是一個開源的AMQP實現,伺服器端用Erlang語言編寫,支援多種客戶端。用於在分散式系統中儲存轉發訊息,在易用性、擴充套件性、高可用性等方面表現不俗,訊息佇列是一種應用系統之間的通訊方法,是通過讀寫出入佇列的訊息來通訊(RPC則是通

RabbitMQ入門教程()安裝常用命令

一:Mac安裝 Mac安裝比Windows安裝更加方便,也不需要再額外配置Web外掛,因為在安裝的時候預設已經配置好了 // 在Updating Homebrew...時可能會卡一會,只需要等就行了 // 在安裝的過程中可能因為網路問題,可能會有部分會失

Django2.1入門教程()django2.1的安裝使用

1、Django簡介 Django是使用python語言開發的一套免費開源的後臺web框架,主要為前端html提供後臺資料支援,後臺專案的執行需要依託於伺服器,從而接收前端傳送的請求,後臺予以響應。 Django提供了一個測試伺服器,是執行在本地電腦之上的。 2005年7月份釋出,2008年

Elasticsearch入門教程()Elasticsearch及外掛安裝

一:安裝Elasticsearch 下載並解壓Elasticsearch 直接到官網(https://www.elastic.co/cn/downloads/elasticsearch)下載適合自己的系統的Elasticsearch,這裡下載的是目前最新的

SDN控制器之OVN實驗介紹安裝OVN

OVN概覽 OVN是由開發出OVS的那群出色的程式設計師們的另一個優秀的作品。這個網路虛擬化專案從2015初宣告啟動,到不久前才釋出第一個正式版本OVN 2.6 。在這篇文章中,我會配置一個簡單示例:在三個主機之間配置一個layer-2 overlay網路。 首先講一下OVN工作機制中的2種

RPC服務框架dubbo()簡介原理解析

前置概念 在學習dubbo前,需要先了解SOA和RPC這兩個概念。 SOA 1.英文名稱(Service Oriented Ambiguity) 2.中文名稱:面向服務架構   2.1 有一個專門提供服務單元.   2.2 其他所有單元都呼叫這個服務. 3.SOA定位:   3.1 如何設計專

protobuf入門教程(五)列舉(enum)、包(package)

列舉(enum) 訊息格式 當需要定義一個訊息型別的時候,可能想為一個欄位指定某“預定義值序列”中的一個值,這時候可以通過列舉實現。 syntax = "proto3";//指定版本資訊,不指定會報錯 message Person //message為關鍵字,作用為定義一種訊息型別 {

無廢話MVC入門教程[概述、環境安裝、建立專案]

MVC入門系列教程-視訊版本,已入駐51CTO學院,文字+視訊學效果更好哦。視訊連結地址如下: 點我檢視視訊。另外,針對該系列教程博主提供有償技術支援,群號:226090960,群內會針對該教程的問題進行及時解答,公用性問題統一講解。學習.NET MVC 只看在《無廢話系列》足夠了,《無廢話系列》簡單、快速、

Eclipse中使用GIT()配置安裝GIT

在Eclipse中整合Git 首先,安裝在Eclipse中安裝EGit外掛 或者選擇下載最新版本的eclipseNEO, 已經集成了Git。 現在你已經有了Git, 下圖是配置介面,你可以做一些自己的配置。 連線 Github 你需要

python爬蟲入門教程()開始爬蟲前的準備工作

爬蟲入門系列教程: 前言   學習python爬蟲也有一段時間了,各種爬蟲技術多多少少也接觸過一些。因為有學弟學妹說想學爬蟲,我萌生了寫個簡單的python爬蟲教程的想法。   一來,給學弟學妹們提供方便,提供一個入門的渠道;二來,總結這些天自身所

Docker 入門實戰(瞭解docker安裝)

什麼是Docker? Docker 是一個開源的應用容器引擎,用Go語言並遵從Apache2.0協議開源。一次封裝到處使用。 Docker的優點: 持續部署與測試(統一環境) 可移植性 環境標準化和版本控制(docker提供tag和version來控制版本)

iOS開發之opencv學習筆記下載安裝

1. opencv是什麼? opencv是一個基於BSD開源協議的影象處理開源庫,截止本人編輯時間:2017年6月1日,最新版本為3.2.0。 2.哪裡可以得到opencv的原始碼以及不同平臺的動態庫? opencv的官方地址為http://opencv.org/,可以在這

protobuf入門教程(二)訊息型別

操作流程 1)在.proto檔案中定義訊息格式 2)使用protobuf編譯器生成C++類 3)使用C++ API來讀寫訊息 訊息格式 syntax = "proto3"; //指定版本資訊,不指定會報錯 message Person

Spring Cloud 入門教程()服務治理(Eureka)

Spring Cloud是一系列框架的集合,其基於Spring Boot的開發便利性巧妙地簡化了分散式系統基礎設施的開發,構建了服務治理(發現註冊)、配置中心、訊息匯流排、負載均衡、斷路器、資料監控、分散式會話和叢集狀態管理等功能,為我們提供一整套企業級分散式雲

qooxdoo入門教程應用程式介面簡單設計

視窗執行配置 教程的最後一個任務就是配置視窗。在開啟視窗時視窗的顯示位置在瀏覽器的左上角,很不好看,為了將視窗的顯示位置離開瀏覽器的邊緣。需要在您的應用程式新增以下程式碼: main.moveTo(50,30); //main.center();  //視窗居中顯示 另外我們應該配置視窗的控制按鈕。讓使用者不

Altium designer入門教程新建一個專案

因為專案需要進行PCB設計,之前自學時,一直沒有找到一個系統的介紹如何設計PCB的教程,因此萌生了自己撰寫的想法。一方面總結一下,另一方面也可向大家分享知識,降低硬體電路設計的門檻。 Altium d

WPF入門WPFXAML簡介

什麼是WPFWindows Presentation Foundation的簡稱。專門用來編寫程式表示層的技術和工具。 學習WPF的好處:學習WPF技術可以為WCF的學習錦上添花。WF設計工作流,而設計WF的語言就是Xaml。學習WPF後,Silverlight可以算是會了80%,因為Silverlight可

Golang教程)介紹安裝

這是本Golang系列教程的第一篇。 什麼是Golang Golang 又稱為 Go,是由 Google 開發的一種開源的、編譯型的、靜態型別的程式語言。 Golang 的主要目的是使開發高可用性和高擴充套件性的Web應用程式變得簡單。 為什